我有两个模型通过多对多关系由另一个模型链接。
这是模型本身
class Posts(models.Model):
id = models.CharField(max_length=108, primary_key=True)
tags = models.ManyToManyField('Tags', through='PostTags')
class Tags(models.Model):
id = models.CharField(max_length=108, primary_key=True)
posts = models.ManyToManyField('Posts', through='PostTags')
class PostTags(models.Model):
id = models.CharField(max_length=108, primary_key=True)
deleted = models.IntegerField()
post_id = models.ForeignKey('Posts', db_column='post_field')
tag_id = models.ForeignKey('Tags', db_column='tag_field')
和tastypie资源
class PostsResource(ModelResource):
tags = fields.ToManyField('django_app.api.TagsResource', 'tags', null=True)
class Meta:
queryset = Posts.objects.filter(deleted=0)
resource_name = 'posts'
class TagsResource(ModelResource):
posts = fields.ToManyField('django_app.api.PostsResource', 'posts', null=True)
class Meta:
queryset = Tags.objects.filter(deleted=0)
resource_name = 'tags'
在posttags表上有一个删除标志,当PostTags中的删除标志为0时,是否只能返回链接结果?
我在tastypie中尝试了this过滤器属性,但它似乎只关心链接表中的标志(即标签或帖子)而不是实际连接的表。
答案 0 :(得分:8)
您可以使用显示表名和字段名的lambda bundle属性过滤字段。
tags = fields.ToManyField('django_app.api.TagsResource', attribute=lambda bundle: bundle.obj.tags.filter(tags__deleted=0))
答案 1 :(得分:1)
From the Resource Field documentation for ToManyField:
通过连接表提供对相关数据的访问。
这个子类要求Django的ORM层正常工作。
此属性在处理属性时也有特殊行为 它可以采取可赎回。例如,如果你需要过滤 反向关系,你可以这样做:
subjects = fields.ToManyField(SubjectResource, attribute=lambda bundle: Subject.objects.filter(notes=bundle.obj, name__startswith='Personal'))