seeberg
seeberg

Reputation: 99

Django merge two QuerySets

I want to merge these two QuerySets. HotkeyAndPrefix do not have entries for every Collection in all_collections. This means len(all_collections) >= len(all_collections_hotkeys_and_prefixes). How can i merge these two QuerySets? If there is no entrie found for a Collection in HotkeyAndPrefix I want hotkey = None, prefix=None. Can I achieve this in one query?

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)

Upvotes: 0

Views: 669

Answers (1)

badiya
badiya

Reputation: 2257

You need to use exclude() query. You can take the list of values which are in the HotkeyAndPrefix.objects.filter(assigned_collection__in=all_collections, user=current_user) queryset

using

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

and you can filter out the value, not in the all_collections_hotkeys_and_prefixes_values with one more query

all_collections_hotkeys_and_prefixes_excluded = all_collections.exclude(pk__in=all_collections_hotkeys_and_prefixes_values)

now you have two querysets, one of collection for which a user has hotkey/prefix and another for which the user doesn't

Upvotes: 2

Related Questions