How to filter queryset object list with matching parameter?

133 views
Skip to first unread message

nobody

unread,
Apr 10, 2014, 11:44:30 AM4/10/14
to django...@googlegroups.com
Hi,

How can I filter an item from the queryset object list if the name is matching? The following won't work.

user_list.filter(user__name=user.name)

Thank you.


carlos

unread,
Apr 10, 2014, 1:38:48 PM4/10/14
to django...@googlegroups.com
hi, maybe you filter you queryset
user_list = Model.objects.filter(user__name=user.name).filter(other__field=user.email)

Cheers


--
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 http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/dd1f2a56-1ee7-4dd5-a513-12ef1ef5e83b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Lucas Klassmann

unread,
Apr 10, 2014, 2:26:23 PM4/10/14
to django...@googlegroups.com
Hi,

If you want exact match:

user_list.filter(user__name__iexact=user.name)


Or containment test:
user_list.filter(user__name__icontains=user.name)


Note that "i" on start is for case-insensitive filtering.

Look here for more information:


Cheers



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



--
Lucas Klassmann
Desenvolvedor de Software

Email: lucaskl...@gmail.com
Web site: http://www.lucasklassmann.com
Message has been deleted

nobody

unread,
Apr 10, 2014, 8:54:50 PM4/10/14
to django...@googlegroups.com
Thanks sacrac and Lucas.

Lucas Klassmann

unread,
Apr 10, 2014, 10:07:02 PM4/10/14
to django...@googlegroups.com
Hi,

You can use ID of object for compare with a list and IN :

for user in user_object_list:
    if user.is_locked():
        user_exclude_list.append(user.id)   

user_list = user_list.exclude(user__in=user_exclude_list)  # [1, 3, 4, 5,]  IDs, is more fast

Cheers.


On Thu, Apr 10, 2014 at 9:23 PM, nobody <jupit...@gmail.com> wrote:

Thanks Lucas, sorry for not being clear, I like not to include the object when the name is matching, I figured out that can be done to use user_list.exclude, not user_list.filter. It is working currently in an inefficient way:

for user in user_object_list:
    if user.is_locked():
        user_list = user_list.exclude(user__name=user.name)

Is there anyway to filter out all users to match the user exclude list in one statement such as following example (wrong syntax I guess):


for user in user_object_list:
    if user.is_locked():
        user_exclude_list.append(user.name)

user_list = user_list.exclude(user__name.icontain=user_exclude_list)


Thank you.




On Friday, April 11, 2014 4:26:23 AM UTC+10, Lucas Klassmann wrote:

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

nobody

unread,
Apr 11, 2014, 6:47:20 AM4/11/14
to django...@googlegroups.com
Hi Lucas,


On Friday, April 11, 2014 12:07:02 PM UTC+10, Lucas Klassmann wrote:
Hi,

You can use ID of object for compare with a list and IN :

for user in user_object_list:
    if user.is_locked():
        user_exclude_list.append(user.id)   

user_list = user_list.exclude(user__in=user_exclude_list)  # [1, 3, 4, 5,]  IDs, is more fast

 Hmm, I actually got an exception:

Exception Type:
TypeError
Exception Value:
int() argument must be a string or a number, not 'list'

Thanks.


Lucas Klassmann

unread,
Apr 11, 2014, 6:50:55 AM4/11/14
to django...@googlegroups.com
Hi,

Sorry, you must specify the field ID, try this:

for user in user_object_list:
    if user.is_locked():
        user_exclude_list.append(user.id)   

user_list = user_list.exclude(id__in=user_exclude_list)  # [1, 3, 4, 5,]  IDs, is more fast


Cheers.



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

nobody

unread,
Apr 15, 2014, 8:04:58 AM4/15/14
to django...@googlegroups.com
Thanks Lucas, but it is the same error:

int() argument must be a string or a number, not 'list'

The id__in is an int argument, but the user_list is a list, I don't see it matchs. I tried to use *user_list, did not work either.

Lucas Klassmann

unread,
Apr 15, 2014, 8:14:43 AM4/15/14
to django...@googlegroups.com
Hi!

You can only use a list of int in this case, because a __in option in exclude expect a list of field type:

Try replace with pk__in, like this:

user_list = user_list.exclude(pk__in=user_exclude_list)

Cheers.



For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages