在django中获取相关值而不出现DoesNotExist错误的最佳实践

在django中获取相关值而不出现DoesNotExist错误的最佳实践,django,django-models,Django,Django Models,如果我有两款Django车型: class Blog(models.Model): author = models.CharField() class Post(models.Model): blog = models.ForeignKey(Blog) 我想获得给定博客的所有帖子: Blog.objects.get(author='John').post_set 如果有一个Blog包含author='John'但没有posts,则会引发DoesNotExist异常。解决这个

如果我有两款Django车型:

class Blog(models.Model):
    author = models.CharField()

class Post(models.Model):
    blog = models.ForeignKey(Blog)
我想获得给定博客的所有帖子:

Blog.objects.get(author='John').post_set
如果有一个Blog包含
author='John'
但没有posts,则会引发
DoesNotExist
异常。解决这个问题的最佳方案是什么

除了前端的或自定义管理器方法之外,我可以进行一次
尝试。有没有一种方法可以覆盖Django以返回一个空集?就我而言,
DoesNotExist
没有用处

或者,可以通过以下方式回避整个问题:

Blog.objects.select_related('post').get(author='John').post_set.values()

您还可以通过使用
Post.objects.filter(blog\uu author='John')

来避免错误。我认为
get\u object\u或\u None
在这种情况下对您不太合适,但您可能会发现对类似问题有用。+1这是标准做法,最容易被其他开发人员识别,从语义上讲,这与OP的目标是等价的。从原始文章中不清楚的是,这一切都发生在博客中的一个模型方法中。你的可能是最节省的解决方案,但我已经实例化了Blog对象,使用它会很好。Ben建议的方法在已经实例化的Post类上使用一个类方法。事实上,您已经有了一个Blog实例,这与此无关,因为FilterSpec是从类模型而不是对象实例创建的。Adam,根据我的经验,在处理非常复杂的查询时,Django中阻力最小的路径是从您想要获取实例的模型的管理器开始(在本例中为
Post.objects
)。