2017-01-05 4 views
0

У меня есть модельзапросить два объекта с разными пулями на Django ORM?

class Person(models.Model): 
    name=models.CharField() 
    slug=models.SlugField() 

Теперь, если я хочу, чтобы люди с слизней john и thomas

что я должен запросить, чтобы получить оба объекта в кортеж или список с slug=thomas и slug=john?

+0

Да, вы можете использовать (=), так как это, ** Person.objects.filter (Q (пробкового = "ТОМАС") | Q (slug = «john»)) ** –

ответ

0

Если я undertsand хорошо ваш вопрос, вы должны написать:

Person.objects.filter(slug__icontains="thomas", slug__icontains="john") 

Эта команда отображает все объекты, где slug = '%thomas%' AND slug = '%john%'

+1

Ваш запрос означает: 'select * from person, где (slug like '% thomas%' и slug like '% john%''. Не то, о чем попросил OP. (Хорошо, он действительно использовал слово «и», но очевидно, что он хочет, это «или») –

2

Вы говорите, что вам нужен человек с слизняка как сортир И как Томас. Но я думаю, что вы имеете в виду и нуждаетесь в ИЛИ. Для этого есть Q Объект в Django, чтобы получить именно то, что вам нужно.

from django.db.models import Q 

Person.objects.filter(Q(slug__icontains="thomas") | Q(slug__icontains="john")) 

Для случаев И это решение достаточно:

Person.objects.filter(slug__icontains="thomas", slug__icontains="john")