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

Как бы узнать, есть ли значение в QuerySet?

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

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

Как я узнаю, содержит ли first_name '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

Самый простой способ - использовать метод 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'