在Django中,如何获取模型的所有实例,其中第一个与fk相关的另一个模型的实例不存在?

时间:2016-07-26 22:34:35

标签: python django

这对我来说真的很棘手。我有以下型号:

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的所有项目,这些项目没有与之相关的建议和给定用户。这可以在一个查询中实现吗?

非常感谢!

2 个答案:

答案 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)