这对我来说真的很棘手。我有以下型号:
class Item(models.Model):
title = models.CharField(max_length=150)
item_type = models.CharField(choices=item_choices)
class Suggestion(models.Model):
user = models.ForeignKey(User)
item = models.ForeignKey(Item)
我需要获取给定item_type的所有项目,这些项目没有与之相关的建议和给定用户。这可以在一个查询中实现吗?
非常感谢!
答案 0 :(得分:2)
可以使用.exclude()
:
items = Item.objects.filter(item_type=item_type).exclude(suggestion__user=user)
这遵循与Suggestion
的向后关系以及与User
的向前关系,并且排除相关用户与给定用户匹配的任何Item
。
答案 1 :(得分:1)
一种方法是使用与用户相关的建议创建项目的查询集,然后将其用作子查询。
items_suggested_by_user = Item.objects.filter(suggestion__user=user)
item_types = Item.objects.filter(item_type=item_type)
items = item_types.exclude(item__in=items_suggested_by_user)