Django如何在多对多字段中过滤对象,而不是原始查询集

时间:2017-07-27 19:07:18

标签: django python-3.x django-queryset

我试图在查询集的多个字段中过滤对象并且遇到困难,大多数其他帖子似乎都基于manytomany字段的内容来过滤查询集,而我需要过滤ManyToMany字段本身

型号:

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中进行的,如果有帮助的话

1 个答案:

答案 0 :(得分:1)

这样的事情?

qs = IngredientsUserNeeds.objects.filter(user=user,drinks__user=user)