Как работать с пустыми внешними ключами в цикле 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