Django:在ListView中处理DoesNotExist
我在Django:在ListView中处理DoesNotExist,django,Django,我在列表视图中有一个自定义查询,它返回登录用户所属公司的所有站点。问题是,如果已创建用户,但没有网站属于公司,则会出现DoesNotExist错误。我想它加载一个模板,有一个添加网站按钮 models.py class Company(models.Model): ... class Site(models.Model): company = models.ForeignKey(Company) class UserProfile(models.Model): com
列表视图
中有一个自定义查询,它返回登录用户所属公司的所有站点
。问题是,如果已创建用户
,但没有网站
属于公司
,则会出现DoesNotExist错误。我想它加载一个模板,有一个添加网站按钮
models.py
class Company(models.Model):
...
class Site(models.Model):
company = models.ForeignKey(Company)
class UserProfile(models.Model):
company = models.ForeignKey(Company)
views.py
class SiteList(ListView):
model = Site
paginate_by = 25
def get_queryset(self):
p = UserProfile.objects.get(id=self.request.user.id)
return Site.objects.filter(company=p.company)
如果找不到对象,则Model.objects.get()返回DoesNotExist错误。
您可以执行以下操作之一:
class SiteList(ListView):
model = Site
paginate_by = 25
def get_queryset(self):
try:
p = UserProfile.objects.get(id=self.request.user.id)
except UserProfile.DoesNotExist:
#do something here
return Site.objects.filter(company=p.company)
或
注意:。筛选器不会引发错误,它只会返回一个空列表您可以按如下方式修改视图文件:
from django.core.exceptions import ObjectDoesNotExist
class SiteList(ListView):
model = Site
paginate_by = 25
def get_queryset(self):
try:
p = UserProfile.objects.get(id=self.request.user.id)
return Site.objects.filter(company=p.company)
except ObjectDoesNotExist:
# code to add
我不认为由于站点不存在而引发错误。这是因为UserProfile对象不存在。用户模型创建后是否立即创建用户配置文件模型?Site.objects.filter()如果没有属于某个公司的站点,则返回“None”。@gZing Site.objects.filter()如果没有属于某个公司的站点,则返回[],感谢您的更正。在第二个示例中,您不能使用p.Company
,因为p是一个列表。使用p[0]。公司@TomaszJakubRup已修复
from django.core.exceptions import ObjectDoesNotExist
class SiteList(ListView):
model = Site
paginate_by = 25
def get_queryset(self):
try:
p = UserProfile.objects.get(id=self.request.user.id)
return Site.objects.filter(company=p.company)
except ObjectDoesNotExist:
# code to add