以下是我的应用和各自的型号:
项目名称:django03
app:home
主/ model.py
from __future__ import unicode_literals
from django.db import models
from django.conf import settings
# Create your 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:家具 的家具/ model.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from django.db import models
# Create your 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
应用:映射 的映射/ model.py
from __future__ import unicode_literals
from django.db import models
from home.models import Home
from 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 -*-
from __future__ import unicode_literals
from django.db import models
from mappings.models import HomeFurnitureMapping
# Create your 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
我的问题是:
如何在管理面板中保存/更新“家具”表单后,在“FurnitureUpdate”表中创建/更新记录?
< / LI>在我从管理面板保存/更新“HomeFurnitureMapping”表单后,如何在“FurnitureUpdate”表中创建/更新记录
如果我使用 django-excel (如批量数据上传软件包),是否可以保留更新“FurnitureUpdate”表格的功能?
更新
我通过在“HomeFurnitureMapping”类中添加方法尝试了django信号:
# method for updating
def update_on_home_furniture_mapping(sender, instance, **kwargs):
print ('ENTERED')
print(instance.id)
m_id = instance.id
from updates.models import FurnitureUpdate
FurnitureUpdate.objects.create(mapping_id = m_id)
print ('Furniture Update created!')
# register the signal
post_save.connect(update_on_tag_product_mapping, sender= HomeFurnitureMapping)
但是我在管理面板中提交表单时出现以下错误。
Error: "FurnitureUpdate.mapping_id" must be a "HomeFurnitureMapping" instance.
答案 0 :(得分:0)
您删除ID时的最后一次错误修复: 取代
FurnitureUpdate.objects.create(mapping_id = m_id)
到
FurnitureUpdate.objects.create(mapping_id = instance)
默认情况下,db django将_id
添加到列的名称中,在您的情况下,数据库中的列最后看起来像COLUMN_NAME_id_id
double id,所以如果要将外键发送为整数您需要使用双_id_id
,但对于单_id
,您需要发送一个实例。