Как работать с пустыми внешними ключами в цикле for в django View

У меня есть модель, которая действует как расписание, где есть несколько отношений FK к одной и той же таблице пользователей. Все эти поля могут быть пустыми/нулевыми.

Проблема в том, что когда я делаю цикл 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.

Я пробовал делать check if 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
Вернуться на верх