Как заполнить модель B при сохранении модели A

У меня есть две модели, A и B соответственно. Я создал модельную форму для модели A, которую я использую при создании экземпляров модели A. Я хочу добиться того, чтобы при сохранении модели A автоматически создавался экземпляр модели B.

models.py

class A(models.Model):
    member = models.ForeignKey(User, on_delete=models.CASCADE, default="")
    book = models.ForeignKey(Books, on_delete=models.CASCADE, default="")
    library_no = models.CharField(default="", max_length=255, blank=True)
    staff_id = models.CharField(default="", max_length=255, blank=True)
    application_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = " Borrow Book"

    def __str__(self):
        return (str(self.member)) + " " + "applied to borrow " + (str(self.book))

class B(models.Model):
    application = models.ForeignKey(BorrowBook, on_delete=models.SET_NULL, default="", null=True)
    approved = models.BooleanField()
    approval_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Approved Lending"

    def __str__(self):
        return str(self.application)

Есть идеи, как я могу этого достичь.

Для этого вы можете использовать signals(post_save), создайте signals.py файл (как рекомендует django docs) и импортируйте следующее:

from django.db.models.signals import post_save
from django.dispatch import receiver

# then write the function to implement it

@receiver(post_save, sender=A)
def create_b_instance(sender, instance, created, **kwargs):
    if created:
        B.objects.create(...) # do functionality here

Теперь всякий раз, когда создается отправитель (A), работает функция внутри def create_b_instance.

Обратитесь к этому документу doc для получения более подробной информации.

Вернуться на верх