Django合并了两个QuerySet

时间:2017-06-30 08:51:06

标签: django django-queryset

我想合并这两个QuerySet。 HotkeyAndPrefix没有all_collections中每个Collection的条目。这意味着len(all_collections)> = len(all_collections_hotkeys_and_prefixes)。我如何合并这两个QuerySet?如果在HotkeyAndPrefix中找不到集合的entrie,我想热键=无,前缀=无。我可以在一个查询中实现这一点吗?

models.py:

class Collection(models.Model):
    creator = models.ForeignKey(User, blank=True, null=True)
    ...

class HotkeyAndPrefix(models.Model):
    user = models.ForeignKey(User, null=True)
    assigned_collection = models.ForeignKey(Collection, null=True)
    hotkey = models.CharField(max_length=1, blank=True, null=True)
    prefix = models.CharField(max_length=20, blank=True, null=True)

    class Meta:
        unique_together = ('user', 'assigned_collection')

view.py

admin = User.objects.filter(username='admin')[0]
all_collections = Collection.objects.filter(creator=admin)
current_user = request.user
all_collections_hotkeys_and_prefixes = HotkeyAndPrefix.objects.filter(assigned_collection__in=all_collections, user=current_user)

1 个答案:

答案 0 :(得分:2)

您需要使用exclude()查询。您可以获取其中的值列表 HotkeyAndPrefix.objects.filter(assigned_collection__in=all_collections, user=current_user) queryset

使用

all_collections_hotkeys_and_prefixes_values = all_collections_hotkeys_and_prefixes.values_list('assigned_collection',flat=True)

您可以过滤掉该值,而不是在all_collections_hotkeys_and_prefixes_values中再过一次查询

all_collections_hotkeys_and_prefixes_excluded = all_collections.exclude(pk__in=all_collections_hotkeys_and_prefixes_values)

现在你有两个查询集,一个是用户拥有热键/前缀的集合,另一个是用户没有查询的

相关问题