Джанго: Уникальность_вместе

Моя Django форма позволяет учителям выбирать, на какой период они хотят запросить ученика: "Академический период 1", "Академический период 2" или "Оба периода". В настоящее время у меня есть опция unique_together, которая отлично работает для "Academic Period 1" и "Academic Period 2", где дублирование запроса не допускается, но как мне сделать так, чтобы опция под названием "Both Periods" блокировала будущие заявки с запросом периодов "Academic Period 1" и "Academic Period 2"? Смотрите мой код ниже. В модели эти варианты являются опциями для поля "Период".

МОДЕЛЬ

class RequestAStudent(models.Model):

PERIODS=(
    ('Academic Network 1', 'Academic Networking 1'),
    ('Academic Network 2', 'Academic Networking 2'),
    ('Both Periods', 'Both Periods'),
)
MARK=(
    ('None', 'None'),
    ('Present', 'Present'),
    ('Tardy', 'Tardy'),
    ('X', 'X'),
    ('Absent', 'Absent'),
)
student = models.ForeignKey(Student, on_delete= models.CASCADE)
date_created = models.DateField(auto_now_add=True, null=True)
Requesting_Teacher = models.ForeignKey(AdvisoryTeacher, on_delete= models.CASCADE)
Period = models.CharField(max_length=18, null=True, choices = PERIODS)
teacher = models.ForeignKey(Teacher, verbose_name='Advisory Teacher',default="None", on_delete= models.CASCADE)
date_requested = models.CharField(max_length=200, verbose_name='Date for Student Request (Use format MMDDYY)', default="2021-11-04",null=True)
attendance = models.CharField(verbose_name='UPDATE ATTENDANCE HERE!',max_length=18, default="None",choices = MARK) #null=True, blank=True,
owner = models.IntegerField("Request Owner", blank=False, default=1)


def __str__(self):
        return "" + str(self.student) + ", Teacher: " + str(self.owner)
class Meta:
    unique_together = ["student", "Period", "date_requested"]

Насколько я понимаю, вы хотите проверить, выбрал ли пользователь оба варианта и не дать ему выбрать первый или второй, попробуйте это

def check_periods(obj,date,student,period):
    obj_with_same_period = type(obj).objects.filter(date=date,student=student,period=period)
    if len(obj_with_same_period) > 0:
        return false
    return true
def save(self,*args,**kwargs):
    if not check_periods(self,self.date_requested,self.student,self.Period):
        return False
    super().save(*args, **kwargs)
Вернуться на верх