Valachio
Valachio

Reputation: 1135

Django - Do different queries depending on value of field

I'm stuck on a seemingly simple issue. I want to do a different queryset if sold_data is empty. Is there an effective way to do this? Or do I need to use a for loop and loop over all the listing objects and check each one?

class Listing(models.Model):
    list_price = models.IntegerField()
    sold_price = models.IntegerField(null=True, blank=True)

    ... other fields

data = Listing.objects.filter(...) # Note: I had already made other queries

if sold_price == None:
    data = data.filter(list_price__gte=1)
else:
    data = data.filter(sold_price__gte=1)

Upvotes: 0

Views: 51

Answers (2)

Satendra
Satendra

Reputation: 6865

You can do it using Q object.

from django.db.models import Q

# your filtered queryset is in 'data' varibale
data.filter(Q(sold_price__isnull=False, sold_price__gte=1) | Q(sold_price__isnull=True, list_price__gte=1))

Upvotes: 1

taoufik A
taoufik A

Reputation: 1410

if you wanna check if an object is None use the is operator
I'm not sure if I did understand your question here is what I get : you wanna filter list_price if the data contains an object with empty value else filter sold_price

You can try this

if data.filter(sold_price__isnull=True).exists():
    data = data.filter(list_price__gte=1)
else:
    data = data.filter(sold_price__gte=1)

Upvotes: 1

Related Questions