Django-查询失败时使用默认值

Django-查询失败时使用默认值,django,Django,我试图创建一个脚本,它将检索一个用户帐户,同时在一个简单的查询中检索特定用户帐户的“主题”。以下是我使用的代码,请注意get_account方法: class AccountManager(Manager): def __init__(self, *args, **kwargs): super(AccountManager, self).__init__(*args, **kwargs) def get_account(self, slug):

我试图创建一个脚本,它将检索一个用户帐户,同时在一个简单的查询中检索特定用户帐户的“主题”。以下是我使用的代码,请注意get_account方法:

class AccountManager(Manager):
    def __init__(self, *args, **kwargs):
        super(AccountManager, self).__init__(*args, **kwargs)

    def get_account(self, slug):
        return get_object_or_404(self.select_related('theme'), status__exact=self.model.ACTIVE_STATUS, slug__exact=slug)
它工作得很好,但如果出于任何原因,“theme”对象返回null(这永远不会发生,但我想确定!),它将重定向到404页面。我希望它做的是检查主题对象是否存在并且有效,如果不存在,则默认为标准主题并继续

如果用户帐户无效,我仍然希望查询抛出404。除了使用大量的try/exceptions之外,还有一种干净的方法吗?我喜欢让我的经理保持整洁:)


希望有人能提供帮助在您的示例中,如果相关主题为空,则不会产生404,因为它不是使用get_object_或_404()检索的对象。如果它找不到既是活动状态又是匹配slug的Account对象,它将只执行404

try:
    account = self.select_related('theme').get(
                 status__exact=self.model.ACTIVE_STATUS, slug__exact=slug
              )
except self.model.DoesNotExist:
    account = self.select_related('theme').get(slug="default_slug")

return account
我建议确保对任何有效帐户对象使用默认主题:

class AccountManager(Manager):
    def __init__(self, *args, **kwargs):
        super(AccountManager, self).__init__(*args, **kwargs)

    def get_account(self, slug):
        account = get_object_or_404(self.select_related('theme'), status__exact=self.model.ACTIVE_STATUS, slug__exact=slug)
        if not account.theme:
            account.theme = default_theme_obj
        return account
我将让您决定如何获得
default\u theme\u obj
,因为我不知道您的模型、缓存结构等等


为了让你的经理保持整洁,你也不需要
\uuuu init\uuuu
方法,因为它不会做默认方法所不能做的事情。

嗨,谢谢你的回复。也许我在我的帖子中不清楚,但我想在“主题”模型不存在时使用默认值,如果帐户模型不存在,它将抛出404。