我有一个django模型,看起来像这样:
class Candidate(models.Model):
first_name = models.CharField(max_length=30, blank=True, null=True)
middle_name = models.CharField(max_length=30, blank=True, null=True)
last_name = models.CharField(max_length=30, blank=True, null=True)
current_job = models.ForeignKey(
Job,
on_delete=models.SET_NULL,
blank=True,
null=True,
default=None,
)
我得到了一个"候选人"的实例,然后尝试将某些值保存到字典中
candidate = Candidate.objects.get(first_name = "John")
data['first_name'] = candidate.first_name
data['last_name'] = candidate.last_name
data['company_name'] = candidate.current_job.company
当所有的值和外国摩托车均得到正确填充时,这可以正常工作。
但是,当任何字段的值都没有,尤其是关于外国关系关系的重要事项时,我会点击一个属性,类似于:" nontype"对象没有属性'Company'
我想适当处理模型中任何字段的"无"情况。我现在找到了这两个工作,但对我来说似乎都不令人满意。
a)我可以在每个字段周围进行尝试(我的模型到20个字段,这似乎都不正确)
try:
data['first_name'] = candidate.first_name
data['last_name'] = candidate.last_name
except:
pass
try:
data['company_name'] = candidate.current_job.company
b)我可以将实例转换为像这样的dict并使用.get(),因为它永远不会引起例外。
candidate_dict = candidate.__dict__
data['first_name'] = candidate_dict.get('first_name')
是否有更好的方法可以在每个字段上处理属性的可能性,而无需处理属性异常?
首先,您需要检查以下查询是否会返回记录。您可以尝试捕获并处理DoesNotExist
异常。
candidate = Candidate.objects.get(first_name="John")
如果存在候选记录,则您无需处理异常first_name,midder_name,last_name字段。
由于current_job是fk字段,并且可能是null的,因此在获取工作模型字段数据之前,您首先需要检查候选人相关的current_job字段不是null