Django: How to create a record in different app/model post saving the data in current model -
following apps , respective models:
project name: django03
app: home
home/model.py
from __future__ import unicode_literals django.db import models django.conf import settings # create models here. user = settings.auth_user_model home_type = ( ('1','1'), ('2','2'), ('3','3'), ) class home(models.model): home_owner = models.foreignkey(user,null=false, verbose_name='owner') hometype= models.charfield(max_length=100, null=false, default=1, choices=home_type, verbose_name='home type') licenseid= models.charfield(max_length=200, null=false, unique=true, verbose_name='license id') archive = models.booleanfield(default=false) def __str__(self): return self.licenseid
app: furniture furniture/model.py
# -*- coding: utf-8 -*- __future__ import unicode_literals django.conf import settings django.db import models # create models here. user = settings.auth_user_model furniture_data_import_source= ( ('0', '0'), ('1', '1'), ('2', '2'), ) class furniture(models.model): furniture_owner = models.foreignkey(user, verbose_name='user') furniture_imported_via = models.charfield(max_length=200, default="0", null=false, choices=furniture_data_import_source, verbose_name='source of import') furniture_title = models.charfield(max_length=100, null=false, verbose_name='furniture title') furniture_description = models.textfield(max_length=250, verbose_name='furniture description') archive = models.booleanfield(default=false) def __str__(self): return self.furniture_title
app:mappings mappings/model.py
from __future__ import unicode_literals django.db import models home.models import home furniture.models import furniture class homefurnituremapping(models.model): home = models.onetoonefield( home, on_delete=models.cascade, null=false, unique=true, verbose_name='home' ) furniture = models.onetoonefield( furniture, on_delete=models.cascade, null=false, unique=true, verbose_name='furniture' )
app: furnitureupdates furnitureupdates/model.py
# -*- coding: utf-8 -*- __future__ import unicode_literals django.db import models mappings.models import homefurnituremapping # create models here. class furnitureupdate(models.model): mapping_id = models.onetoonefield( homefurnituremapping, on_delete=models.cascade, null=false, unique=true, verbose_name='mapping id' ) update_status = models.integerfield(null=false, default=1) update_date = models.datefield(auto_now_add=true, null=false, verbose_name='update date') update_time = models.timefield(auto_now_add=true, null=false, verbose_name='update time') def __str__(self): return self.mapping_id
my questions are:
how create/update record in "furnitureupdate" table after save/update "furniture" form admin panel?
how create/update record in "furnitureupdate" table after save/update "homefurnituremapping" form admin panel
and can functionality update "furnitureupdate" table retained if use django-excel bulk data upload packages?
update:
i tried django signals, adding method in "homefurnituremapping" class:
# method updating def update_on_home_furniture_mapping(sender, instance, **kwargs): print ('entered') print(instance.id) m_id = instance.id updates.models import furnitureupdate furnitureupdate.objects.create(mapping_id = m_id) print ('furniture update created!') # register signal post_save.connect(update_on_tag_product_mapping, sender= homefurnituremapping)
but following error on form submission in admin panel.
error: "furnitureupdate.mapping_id" must "homefurnituremapping" instance.
your last error fix remove id: replace
furnitureupdate.objects.create(mapping_id = m_id)
to
furnitureupdate.objects.create(mapping_id = instance)
by default in db django added _id
name of columns, , in case columns inside database looks column_name_id_id
double id @ end, if want send foreign key integer need use double _id_id
, single _id
need send instance.
Comments
Post a Comment