我有一個Django的模型,看起來是這樣的:處理Django的模型字段可能是「無」,以避免AttributeError的
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
這適用於正確填充所有值和外鍵。
然而,當任何字段的值是無,對於ForeignKey的關係特別重要,我會打一個AttributeError,是這樣的:「NoneType」對象有沒有屬性「公司」
我想正確處理模型中任何字段的「無」情況。 我現在已經發現了這兩種解決方法,但對我而言都不是很滿意。
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)我可以將實例轉換爲這樣的字典,並使用.get(),因爲這永遠不會引發一個異常。
candidate_dict = candidate.__dict__
data['first_name'] = candidate_dict.get('first_name')
是否有處理字段的值是無無對每一個單場處理一個AttributeError異常的可能性,更好的辦法?