Как вставить значения в родственные модели? - PullRequest
1 голос
/ 06 марта 2020

У меня есть две модели следующим образом:

class Reservation(models.Model):
    startDate = models.DateField()
    endDate = models.DateField()
    count = models.IntegerField(blank=False, null=False)

    def generateReservationItems(self):
        for d in range((endDate - startDate).days):
           reservationItem= ReservationItems(reservationDate=d, count = count)
           reservationItem.save()

class ReservationItems(models.Model):
    reservationDate = models.DateField();
    reservation = models.ForeignKey(Reservation, on_delete=models.CASCADE)
    count = models.IntegerField(blank=False, null=False)

Класс Reservation представляет пакет дат (диапазон дат), а класс ReservationItems хранит каждую отдельную дату в классе Reservation.
Я построил Функция generateReservationItems () вызывается автоматически при сохранении объекта Reservation. Функция вставляет количество элементов равное разному между startDate и endDate. например: если startDate = Mars 6 2020 и endDate = Mars 10 2020, в ReservationItems будут вставлены 5 элементов:

Mars 6 2020
Mars 7 2020
Mars 8 2020
Mars 9 2020
Mars 10 2020

Но объекты Reservation успешно вставляются без вставки элементов вservationItems. Я не знаю, как вызывать функцию generateReservationItems () после создания объекта резервирования. Любые идеи, пожалуйста, сделать это, или если есть и другие эффективные методы для выполнения таких задач.

1 Ответ

0 голосов
/ 06 марта 2020

post_save - это ваш друг: https://docs.djangoproject.com/en/3.0/ref/signals/#post -save

from django.db.models.signals import post_save


class Reservation(models.Model):
    ...


@receiver(post_save, sender=Reservation, created=True)
def invokeGenerateReservationItems(sender, instance, **kwargs):
    instance.generateReservationItems()
...