处理可能为"无"的 Django 模型字段以避免 AttributeError



我有一个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

最新更新