I have two Model, A and B respectively. I have created an modelform for Model A which i use in creating instances of Model A . What i want to achieve is that whenever i save Model A , i want an instance of Model B to be created automatically.
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)
Any idea as to how i can achieve it.
You can use signals(post_save) to achieve this, create a signals.py
file(as django docs recommends) and import the following:
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
Now here whenever the sender (A) is created the function inside def create_b_instance
is worked.
Refer this doc for more details.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.