Как привязать это к конкретной модели
Я получаю следующую ошибку:
null value in column "two_week_period_id" of relation "timesheets_usertimesheet" violates not-null constraint
Как я понимаю, потому что последнее нулевое значение не передается. Вот мои модели:
models.py
class TwoWeekPeriod(models.Model):
start_date = models.DateField(_("Start Date"))
end_date = models.DateField(_("End Date"))
week_number = models.IntegerField(_("Week Number"))
class CreateNewTimesheet(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
start_date = models.DateField(_("Start Date"))
end_date = models.DateField(_("End Date"))
two_week_period = models.ForeignKey(TwoWeekPeriod, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def save(self, *args, **kwargs):
week_number = (self.start_date - timezone.now().date()).days // 14 + 1
two_week_period, _ = TwoWeekPeriod.objects.get_or_create(
start_date=self.start_date,
end_date=self.end_date,
defaults={'week_number': week_number}
)
self.two_week_period = two_week_period
super().save(*args, **kwargs)
Выше было создано two_week_period
в качестве идентификатора для каждых двух введенных недель. Например, 03/10/2024-03/14/2024 - это two_week
из id
1, следующие две недели добавят идентификатор 2 и так далее.
Я пытаюсь передать two_week_period
из CreateNewTimesheet
в:
предполагаемая версия UserTimesheet
class UserTimesheet(models.Model):
employee = models.ForeignKey(Employee, models.SET_NULL, blank=True, null=True)
start_date = models.DateField(_("Start Date"))
end_date = models.DateField(_("End Date"))
two_week_period = models.ForeignKey(TwoWeekPeriod, on_delete=models.CASCADE)
Похоже, что без two_week_period
в модели Usertimesheet
я не получаю эту ошибку. Но я хочу отобразить two_week_period
, чтобы можно было привязать две недели к одному листу учета рабочего времени (для данных и записей хранения).
Есть ли лучший способ связать two_week_id
? Может быть, я делаю что-то неправильно?
При отсутствии two_week_period = models.ForeignKey(TwoWeekPeriod, on_delete=models.CASCADE)
все работает нормально, просто передается нулевое значение, разумеется.
Любая помощь будет оценена по достоинству.
Мне удалось разобраться с этим. Я только что сделал это с моделью UserTimesheet.
class UserTimesheet(models.Model):
employee = models.ForeignKey(Employee, models.SET_NULL, blank=True, null=True)
start_date = models.DateField(_("Start Date"))
end_date = models.DateField(_("End Date"))
two_week_period = models.ForeignKey(TwoWeekPeriod, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
# Determine the week number for this timesheet
week_number = (self.start_date - timezone.now().date()).days // 14 + 1
# Find or create the corresponding TwoWeekPeriod instance
two_week_period, _ = TwoWeekPeriod.objects.get_or_create(
start_date=self.start_date,
end_date=self.end_date,
defaults={'week_number': week_number}
)
# Assign the TwoWeekPeriod to the timesheet
self.two_week_period = two_week_period
super().save(*args, **kwargs)