8
Using save()
:
If you want to use the save()
method, you could do the following:
def save(self, *args, **kwargs):
OtherModel.objects.create(something=kwargs['something'])
YetAnotherModel.objects.create(
something_else=kwargs['something_else']
)
super(ChessParty, self).save(*args, **kwargs)
As @e4c5 states in his comment, it is easier to implement and that is why I include it!
My take on the problem:
Although you could do this on the save()
, I would recommend instead to use a signal.
Specifically use a post_save
signal. Here is how to do this:
-
Create a file
your_app/signals.py
:from django.db.models.signals import post_save from django.dispatch import receiver from your_app.models import ChessParty, OtherModel, YetAnotherModel @receiver(post_save, sender=ChessParty) def change_my_name_plz (sender, instance, created, **kwargs): if created: OtherModel.objects.create(something=kwargs['something']) YetAnotherModel.objects.create( something_else=kwargs['something_else'] )
-
You now need to override the
ready()
function onyour_app/app.py
:from django.apps import AppConfig class YourAppConfig(AppConfig): name = 'your_project.your_app' def ready(self): import your_project.your_app.signals
-
Finally, add the following in
your_app/__init__.py
:default_app_config = 'your_project.your_app.apps.YourAppConfig'
Now you have a signal that will create an OtherModel
and YetAnotherModel
objects right after you create a new ChessParty
object.
Alternative way to define signals:
There is an alternative way that does not use the @receiver
decorator, but the connect()
method:
-
your_app/signals.py
:from your_app.models import ChessParty, OtherModel, YetAnotherModel def change_my_name_plz (sender, instance, created, **kwargs): if created: OtherModel.objects.create(something=kwargs['something']) YetAnotherModel.objects.create( something_else=kwargs['something_else'] )
-
your_app/app.py
:from django.apps import AppConfig from django.db.models.signals import post_save from your_app.models import ChessParty from your_project.your_app.signals import change_my_name_plz class YourAppConfig(AppConfig): name = 'your_project.your_app' def ready(self): post_save.connect(change_my_name_plz, sender=ChessParty)
-
your_app/__init__.py
stays the same as above (step 3).