Django: Get an object form the DB, or 'None' if nothing matches

后端 未结 8 1470
粉色の甜心
粉色の甜心 2020-11-30 02:45

Is there any Django function which will let me get an object form the database, or None if nothing matches?

Right now I\'m using something like:

foo          


        
相关标签:
8条回答
  • 2020-11-30 03:31

    In Django 1.6 you can use the first() Queryset method. It returns the first object matched by the queryset, or None if there is no matching object.

    Usage:

    p = Article.objects.order_by('title', 'pub_date').first()
    
    0 讨论(0)
  • 2020-11-30 03:34

    To add some sample code to sorki's answer (I'd add this as a comment, but this is my first post, and I don't have enough reputation to leave comments), I implemented a get_or_none custom manager like so:

    from django.db import models
    
    class GetOrNoneManager(models.Manager):
        """Adds get_or_none method to objects
        """
        def get_or_none(self, **kwargs):
            try:
                return self.get(**kwargs)
            except self.model.DoesNotExist:
                return None
    
    class Person(models.Model):
        name = models.CharField(max_length=255)
        objects = GetOrNoneManager()
    

    And now I can do this:

    bob_or_none = Person.objects.get_or_none(name='Bob')
    
    0 讨论(0)
提交回复
热议问题