Check if an object exists

前端 未结 6 1894
孤独总比滥情好
孤独总比滥情好 2021-02-02 04:57

I need to check if Model.objects.filter(...) turned up anything, but do not need to insert anything. My code so far is:

user_pass = log_in(request.P         


        
相关标签:
6条回答
  • 2021-02-02 05:27

    You can also use get_object_or_404(), it will raise a Http404 if the object wasn't found:

    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!
        ...
    
    0 讨论(0)
  • 2021-02-02 05:33

    Since filter returns a QuerySet, you can use count to check how many results were returned. This is assuming you don't actually need the results.

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

    After looking at the documentation though, it's better to just call len on your filter if you are planning on using the results later, as you'll only be making one sql query:

    A count() call performs a SELECT COUNT(*) behind the scenes, so you should always use count() rather than loading all of the record into Python objects and calling len() on the result (unless you need to load the objects into memory anyway, in which case len() will be faster).

    num_results = len(user_object)
    
    0 讨论(0)
  • 2021-02-02 05:39

    I think the easiest from a logical and efficiency point of view is using the queryset's exists() function, documented here:

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

    So in your example above I would simply write:

    if User.objects.filter(email = cleaned_info['username']).exists():
        # at least one object satisfying query exists
    else:
        # no object satisfying query exists
    
    0 讨论(0)
  • 2021-02-02 05:42

    You can use:

    try:
       # get your models
    except ObjectDoesNotExist:
       # do something
    
    0 讨论(0)
  • 2021-02-02 05:48

    the boolean value of an empty QuerySet is also False, so you could also just do...

    ...
    if not user_object:
       do insert or whatever etc.
    
    0 讨论(0)
  • 2021-02-02 05:49

    If the user exists you can get the user in user_object else user_object will be None.

    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
    
    0 讨论(0)
提交回复
热议问题