我试图在查询集的多个字段中过滤对象并且遇到困难,大多数其他帖子似乎都基于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中进行的,如果有帮助的话
答案 0 :(得分:1)
这样的事情?
qs = IngredientsUserNeeds.objects.filter(user=user,drinks__user=user)