如何解决在模型中使用ForeignKey时如何避免模板中的NonType错误?
我要访问模板中的用户区域:
{% if object.seller.profile.post_code %}{{ object.seller.profile.post_code }} {% endif %}{% if object.seller.profile.city%}{{ object.seller.profile.city }}<br/>{% endif %}
{% if object.seller.profile.region.name %}{{ object.seller.profile.region.name }},{% endif %}{% if object.seller.profile.region.country.name %}{{ object.seller.profile.region.country.name }}{% endif %}
这是我的模特
class Profile(models.Model):
user = models.OnetoOneField(User,on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg',upload_to='profile_pics',verbose_name='Profilbild')
post_code = models.CharField(max_length=5,blank=True,verbose_name='Postleitzahl')
region = models.ForeignKey(Region,on_delete=models.CASCADE,null=True,verbose_name='Region',help_text='Bundesland oder Kanton')
city = models.CharField(max_length=50,verbose_name='Stadt')
street = models.CharField(max_length=50,verbose_name='Straße')
class Region(models.Model):
name = models.CharField(max_length=30,help_text='Bundesland oder Kanton',default='Berlin')
symbol = models.CharField(max_length=30,verbose_name='Region-Kürzel',default='BER')
country = models.ForeignKey('Country',verbose_name='Land',default=0)
class Country(models.Model):
name = models.CharField(max_length=30,default='Deutschland')
symbol = models.CharField(max_length=4,verbose_name='Kürzel',default='DE')
但是我不想强迫用户输入他们的地址数据。但是,如果未填写ForeignKey-Fields,我会得到
'nonetype' object has no attribute 'country'
除了检查每个字段是否填充在views.py中并将其分别添加到上下文中之外,还有一种更优雅的方法吗?
解决方法
可以在个人档案模型中添加一些快捷方式来帮助解决此问题:
views.py:
class Profile(models.Model):
...
@property
def country_name(self):
return self.region.country.name if self.region and self.region.country else None
template.html:
...
<div> {{object.seller.profile.country_name }} </div>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。