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