问题描述
我要访问模板中的用户区域:
{% 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>