2011-07-02 18 views
10

Bir değer QuerySet'te olup olmadığını nasıl görebilirdim? ÖrneğinBir değer veya nesnenin bir QuerySet alanında olup olmadığını görmek için

, aşağıdaki model varsa: 'David' first_name bir sorgu kümesi içerdiği takdirde

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

nasıl öğrenebilirim ki? Aşağıdakileri yapmanın yolu:

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

Ya da belirli bir kullanıcı nesnesi bunun yerine? 'David' in QuerySet['first_name'] gibi bir şey mi? Teşekkür ederim.

+2

Neden bunu 'filter()'? –

cevap

26

kolay yoludur yöneticisinin get yöntemini kullanmaktır:

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

nesneyi almak gerekir yoksa exists yöntem de geçerlidir:

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

Eğer zaten nesne var ve bir sorgu kümesi içinde bulunan olup olmadığını belirlemek istiyorum:

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

Nesne yerine bir değer kullanmak isterseniz:

value = 'David' 
qs = Foo.objects.filter(<criteria>).values_list('foo_name',flat=True) 
if value in qs: 
    print 'Nice' 
+1

teşekkürler bu gerçekten yararlıdır. Bir kaç soru: 1) Foo.objects.filter (...): 've' foo.objects.filter (...) 'ise ('' ise') arasındaki fark nedir? var() 'büyük ölçüde daha hızlı? 2) '.values ​​() 'ölçütlerinde bunu neden kullanacağız? Teşekkür ederim. – David542

+0

1) Filter, bir queryset döndürür, queryset'in herhangi bir kaydı bulunup bulunmadığına bağlı olarak True veya False döndürür. 2) flat = True ise, değerler yöntemi tek bir öğenin listesini döndürür, aksi halde bir tupl listesi döndürür. Daha fazla ayrıntı için mükemmel queryset belgelerine danışabilirsiniz. – shanyu

+0

tamam teşekkürler. Dokümanlara baktım ve bazı testler yaptım ve 'flat = True' ise tupleların listesini veya tek öğelerin listesini döndüren .values_list()' dır. .values ​​() 'flat = True' sunmuyor (bir hata mesajı aldığımda belgelere baktım). – David542

İlgili konular