【发布时间】:2018-01-03 16:10:48
【问题描述】:
我正在尝试过滤查询集的多对多字段中的对象并且遇到困难,大多数其他帖子似乎都解决了根据多对多字段的内容过滤查询集的问题,而我需要过滤多对多字段本身。
型号:
class IngredientsUserNeeds(models.Model):
user = models.ForeignKey(User, blank=True, null=True)
drinks = models.ManyToManyField(Drink)
class Drink(models.Model):
name = models.CharField(max_length = 1000, null=True, blank=True)
user = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
在我的 ListAPI 视图中,我开始过滤
qs = IngredientsUserNeeds.objects.all().filter(user=user)
但是在调用这个之后,我想过滤掉不属于特定用户的 qs 的每个对象中的饮料,例如,
qs = qs.filter(drinks=drink_object)
但是,此调用过滤原始的 IngredientsUserNeeds 查询集,而不是它的 ManyToMany 字段中的项目。如何修改我的过滤器,使其不过滤查询集,而是过滤每个对象的 ManyToMany 字段中的项目?
编辑 1
for obj in qs:
obj.drinks = obj.drinks.all().filter(user=user)
我到了这一点,但不幸的是它修改了数据库中的原始查询集。有什么建议可以让我保留原始查询集吗?如果有帮助,这是在 Django Rest Framework ListAPIView 中执行的
【问题讨论】:
-
对不起,这有点混乱。归根结底,您想保留属于当前用户的饮品的 IngredientsUserNeeds 实例吗?如果是这样,请参阅下面的答案
-
我的意思是我有一个查询组的成分userneeds 对象,而不是过滤该查询集,我想根据饮料的用户字段是否过滤每个对象的多对多字段包含特定用户
-
@AlexNelson 你有没有找到解决方案?我需要做同样的事情。
标签: django python-3.x django-queryset