test if model object fits into QuerySet without executing SQL?

17 views
Skip to first unread message

Thomas Klopf

unread,
Mar 15, 2019, 11:46:14 AM3/15/19
to Django users
Hi all,
  Please I have a question, couldn't find any answer for it..

  Let's say I have 2 QuerySets:
  1) Select all records from table
  2) Select all records from table where color = "blue"

So QuerySet #2 is more restricted than QuerySet #1

So question is - if I get a model object from QuerySet #1, is it possible to check if the model object is 'filtered'  or fits into QuerySet #2, without actually executing the SQL for QuerySet #2 to find the record again?

I'm asking because running the SQL for QuerySet #2 is expensive, ideally would test if the record fits into the QuerySet in purely python/django.

Thanks in advance!
Tom

jgi...@caktusgroup.com

unread,
Mar 15, 2019, 12:34:34 PM3/15/19
to Django users
Tom,

Could you clarify "fits into"?

qs1 = Table.objects.all()
qs2
= Table.objects.filter(color='blue')


mo1
= qs1[0]


Are you trying to determine if mo1 is in qs2?

Best

Phako Perez

unread,
Mar 15, 2019, 12:58:57 PM3/15/19
to django...@googlegroups.com
You can create query as

def get_query(value=None):
    if value:
          query = “select all records from table where color = ‘" + value + “‘
          query = “select all records from table”

    return query

Sent from my iPhone
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/26c692ef-6e97-4fa2-b5ef-6ebb24e408cb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Thomas Klopf

unread,
Mar 18, 2019, 12:15:19 PM3/18/19
to Django users
Hello,
  Yes exactly that, if mo1 is in qs2. BUT without running the SQL on the database, if possible.

Thanks!
Tom

Jani Tiainen

unread,
Mar 18, 2019, 12:25:53 PM3/18/19
to django...@googlegroups.com
Hi,

Note that Django querysets are lazy.

So running:

qs1 = MyModel.objects.all()

As is, doing that doesn't execute any queries. If you want filtered objects, just add filter:

qs2 = qs1.filter(color="blue")

qs2 is not even evaluated yet. You need actually cause something that evaluates queryset.

But if you want to fetch all objects from qs1 and then apply some "filtering" you can just evaluate whole queryset and it's results
will be cached. You can use list comprehensions or itertools to filter your objects in Python.


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.

For more options, visit https://groups.google.com/d/optout.


--
Jani Tiainen
Software wizard


Always open for short term jobs or contracts to work with Django.

jgi...@caktusgroup.com

unread,
Mar 18, 2019, 12:26:05 PM3/18/19
to Django users
result = qs1.difference(qs2)

if Result is length 0 then all of 1 is in 2.
Reply all
Reply to author
Forward
0 new messages