2016-07-26 46 views
0

这对我来说真的很棘手。我有以下型号:在Django中,如何获取模型的所有实例,其中与fk第一个相关的另一个模型的实例不存在?

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

这可以用.exclude()来完成:

items = Item.objects.filter(item_type=item_type).exclude(suggestion__user=user) 

这是继向后关系Suggestion,并正向关系User,并且不包括在其中的相关用户的用户符合任何Item秒。

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) 
相关问题