Это мои models.py:
class Department(models.Model):
name = models.CharField(max_length=20, blank=False, null=False, verbose_name='Department')
def __str__(self):
return '{}'.format(self.name)
class Users(models.Model):
name = models.CharField(max_length=20, blank=False, null=False, verbose_name='Name')
last_name = models.CharField(max_length=20, blank=False, null=False, verbose_name='Last Name')
department = models.ForeignKey(Department, related_name='user_department', on_delete=models.CASCADE)
def __str__(self):
return '{} {} - {}'.format(self.name, self.last_name, self.department)
class WeeklyCheck(models.Model):
department = models.ForeignKey(Department, related_name='weeklycheck_department', on_delete=models.CASCADE)
start_date = models.DateField(blank=False, null=True, verbose_name='Start date')
end_date = models.DateField(blank=False, null=True, verbose_name='End Date')
active = models.BooleanField(default=True, verbose_name='Active?')
def __str__(self):
return '{} / {} to {} - {}'.format(self.department, self.start_date, self.end_date, self.active)
class Attendance(models.Model):
user = models.ForeignKey(Users, related_name='attendance_user', on_delete=models.CASCADE)
date = models.DateField(blank=False, null=True, verbose_name='Date')
check = models.BooleanField(default=True, verbose_name='Check')
def __str__(self):
return '{} / {} / {}'.format(self.user, self.date, self.check)
def clean(self):
qs = WeeklyCheck.objects.filter(start_date__lte=self.date, end_date__gte=self.date, active=True)
department_a = Users.objects.filter(department__name='Department A')
if not qs and department_a:
qs = WeeklyCheck.objects.filter(start_date__lte=self.date, end_date__gte=self.date, active=True)
department_b = Users.objects.filter(department__name='Department B')
if not qs and department_b:
qs = WeeklyCheck.objects.filter(start_date__lte=self.date, end_date__gte=self.date, active=True)
department_c = Users.objects.filter(department__name='Department C')
if not qs and department_c:
raise ValidationError('You can not check! The week is not active.')
У меня есть отделы ( Отдел ), в которых есть пользователи ( Пользователи ).
Каждый отдел отмечает недели ( WeeklyCheck ), которые имеют дату начала и дату окончания и могут быть или не быть активными.
Каждый пользователь проверяет на определенную дату ( Посещаемость ).
Я хочу, чтобы по предварительному назначению в вашем отделе он мог или не может провести проверку.
Я использовал чистый метод, но безрезультатно, поскольку, просто имея активную неделю независимо от отдела, он принимает подтверждение.