如何处理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