web-gelistirme-sc.com

Bir nesne olup olmadığını kontrol edin

Model.objects.filter(...) işlevinin bir şey olup olmadığını kontrol etmem gerekiyor, ancak herhangi bir şey eklememe gerek yok. Şu ana kadar kodum:

user_pass = log_in(request.POST)  # form class
if user_pass.is_valid():
    cleaned_info = user_pass.cleaned_data
    user_object = User.objects.filter(email = cleaned_info['username'])
39
sinθ

filterQuerySet değerini döndürdüğü için, kaç sonuç döndürüldüğünü kontrol etmek için count komutunu kullanabilirsiniz. Bu aslında sonuçlara ihtiyacınız olmadığını varsayar.

num_results = User.objects.filter(email = cleaned_info['username']).count()

Ancak belgelere baktıktan sonra, sonuçları daha sonra kullanmayı planlıyorsanız, yalnızca bir sql sorgusu yapacağınız için filtrenizde len çağırmanız daha iyi olacaktır:

Bir count () çağrısı sahnelerin arkasında bir SELECT COUNT (*) gerçekleştirir, bu nedenle tüm kaydı Python nesnelerine yüklemek ve sonuçta len () çağırmak yerine her zaman count () kullanmalısınız (nesneleri yüklemeniz gerekmiyorsa) Yine de belleğe, bu durumda len () daha hızlı olacaktır).

num_results = len(user_object)
42
joneshf

Mantıklı ve verimli bir bakış açısından en kolayının, burada belgelenen queryset'in exists () işlevini kullanmak olduğunu düşünüyorum:

https://docs.djangoproject.com/en/dev/ref/models/querysets/#Django.db.models.query.QuerySet.exists

Bu yüzden yukarıdaki örneğinizde basitçe şunu yazarım:

if User.objects.filter(email = cleaned_info['username']).exists():
    # at least one object satisfying query exists
else:
    # no object satisfying query exists
80
mpaf

boş bir QuerySet'in boolean değeri de yanlıştır, yani siz de ...

...
if not user_object:
   do insert or whatever etc.
6
David Lam

get_object_or_404 () öğesini de kullanabilirsiniz, eğer nesne bulunmazsa bir Http404 yükseltir:

user_pass = log_in(request.POST) #form class
if user_pass.is_valid():
    cleaned_info = user_pass.cleaned_data
    user_object = get_object_or_404(User, email=cleaned_info['username'])
    # User object found, you are good to go!
    ...
5
César

Kullanabilirsiniz:

try:
   # get your models
except ObjectDoesNotExist:
   # do something
3
acarayol

eğer kullanıcı varsa user_object içindeki bir kullanıcıyı alabilirsiniz user_object hiçbiri olmayacaktır.

try:
    user_object = User.objects.get(email = cleaned_info['username'])
except User.DoesNotExist:
    user_object = None
if user_object:
    # user exist
    pass
else:
    # user does not exist
    pass
1
paras chauhan