Как посмотреть, находится ли значение или объект в поле QuerySet - PullRequest
17 голосов
/ 02 июля 2011

Как бы я увидел, если значение находится в QuerySet?

Например, если у меня есть следующая модель:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    first_name = models.CharField(max_length=50)

Как бы я узнал, содержится ли имя-имя 'David' в QuerySet?Способ сделать следующее:

ld = UserProfile.objects.filter(...).values('first_name')
    >>> for object in ld:
    ...     if object['first_name'] =='David':
    ...             print True

Или, если вместо этого есть конкретный пользовательский объект?Что-то вроде 'David' in QuerySet['first_name']?Спасибо.

1 Ответ

39 голосов
/ 02 июля 2011

Самый простой способ - использовать метод get менеджера:

try:
    foo = Foo.objects.get(foo_name='David')
except Foo.DoesNotExist:
    print 'Nope'
except Foo.MultipleObjectsReturned:
    print 'Filter is a better choice here'

Метод exists также применим, если вам не нужно получать объект:

if Foo.objects.filter(foo_color='green').exists():
    print 'Nice'

Если у вас уже есть объект и вы хотите определить, содержится ли он в наборе запросов:

foo = Foo.objects.get(foo_name='David')
qs = Foo.objects.filter(<criteria>)
if foo in qs:
    print 'Nice again'

Если вы хотите использовать значение вместо объекта:

value = 'David'
qs = Foo.objects.filter(<criteria>).values_list('foo_name',flat=True)
if value in qs:
    print 'Nice'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...