How do I get the object if it exists, or None if it does not exist?

后端 未结 19 1547
清酒与你
清酒与你 2020-11-28 01:14

When I ask the model manager to get an object, it raises DoesNotExist when there is no matching object.

go = Content.objects.get(name=\"baby\")
         


        
19条回答
  •  旧巷少年郎
    2020-11-28 01:50

    From django 1.7 onwards you can do like:

    class MyQuerySet(models.QuerySet):
    
        def get_or_none(self, **kwargs):
            try:
                return self.get(**kwargs)
            except self.model.DoesNotExist:
                return None
    
    
    class MyBaseModel(models.Model):
    
        objects = MyQuerySet.as_manager()
    
    
    class MyModel(MyBaseModel):
        ...
    
    class AnotherMyModel(MyBaseModel):
        ...
    

    The advantage of "MyQuerySet.as_manager()" is that both of the following will work:

    MyModel.objects.filter(...).get_or_none()
    MyModel.objects.get_or_none()
    

提交回复
热议问题