如何处理django View中for循环中的空外键
How to deal with empty foreign keys in a for loop within django View
我有一个模型,它作为一个时间表,其中对同一用户有多个 FK 关系 table。所有这些字段都可以是 blank/null.
问题是,当我执行 for 循环时,我试图根据用户出现在某个班次的时间来匹配用户,然后将 +1 添加到计数器以获得该用户的总班次。
模型看起来像这样:
class WeekdayAssignment(models.Model):
"""Model definition for WeekdayAssignment."""
start_date = models.DateField(auto_now=False, auto_now_add=False)
end_date = models.DateField(auto_now=False, auto_now_add=False)
triage_emea_1 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_emea_1", blank=True, null=True)
triage_nam_1 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_1", blank=True, null=True)
triage_nam_2 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_2", blank=True, null=True)
triage_nam_3 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_3", blank=True, null=True)
...
如您所见,我有 4 个分流班次,同一用户可以处理任何这些班次。
我想做一个 for 循环来计算用户在任何一个字段中轮班的次数。
在不深入了解我正在做的事情的所有细节的情况下,我会保持简单,因为错误会立即发生。
Views.py
def someview(request):
shift_users = TeamMember.objects.all()
weekday_shifts = WeekdayAssignment.objects.all()
for t in shift_users:
for ws in weekday_shifts:
print(ws.triage_nam_3)
只要该字段中有一个值,就可以正常打印,但如果该字段为空(即没有为该字段选择用户),它将失败并显示 TeamMember matching query does not exist.
我已经尝试检查是否 None 但它给出了同样的问题。现在,一旦我填充了一个用户,这个错误就消失了,但是我如何检查它是否为空并跳过它?
提前致谢。
您可以捕获 models.DoesNotExist
异常。
def someview(request):
shift_users = TeamMember.objects.all()
weekday_shifts = WeekdayAssignment.objects.all()
for t in shift_users:
for ws in weekday_shifts:
try:
print(ws.triage_nam_3)
except TeamMember.DoesNotExist:
continue
我有一个模型,它作为一个时间表,其中对同一用户有多个 FK 关系 table。所有这些字段都可以是 blank/null.
问题是,当我执行 for 循环时,我试图根据用户出现在某个班次的时间来匹配用户,然后将 +1 添加到计数器以获得该用户的总班次。
模型看起来像这样:
class WeekdayAssignment(models.Model):
"""Model definition for WeekdayAssignment."""
start_date = models.DateField(auto_now=False, auto_now_add=False)
end_date = models.DateField(auto_now=False, auto_now_add=False)
triage_emea_1 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_emea_1", blank=True, null=True)
triage_nam_1 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_1", blank=True, null=True)
triage_nam_2 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_2", blank=True, null=True)
triage_nam_3 = models.ForeignKey(TeamMember, on_delete=models.DO_NOTHING, related_name="triage_nam_3", blank=True, null=True)
...
如您所见,我有 4 个分流班次,同一用户可以处理任何这些班次。
我想做一个 for 循环来计算用户在任何一个字段中轮班的次数。
在不深入了解我正在做的事情的所有细节的情况下,我会保持简单,因为错误会立即发生。
Views.py
def someview(request):
shift_users = TeamMember.objects.all()
weekday_shifts = WeekdayAssignment.objects.all()
for t in shift_users:
for ws in weekday_shifts:
print(ws.triage_nam_3)
只要该字段中有一个值,就可以正常打印,但如果该字段为空(即没有为该字段选择用户),它将失败并显示 TeamMember matching query does not exist.
我已经尝试检查是否 None 但它给出了同样的问题。现在,一旦我填充了一个用户,这个错误就消失了,但是我如何检查它是否为空并跳过它?
提前致谢。
您可以捕获 models.DoesNotExist
异常。
def someview(request):
shift_users = TeamMember.objects.all()
weekday_shifts = WeekdayAssignment.objects.all()
for t in shift_users:
for ws in weekday_shifts:
try:
print(ws.triage_nam_3)
except TeamMember.DoesNotExist:
continue