python – Django admin – 编辑页面上的错误模型对象
我有3个继承的类(Fitters – > Workers – > Staffs)与我的数据库中的表连接(类名为复数,但现在不重要).
用户只能添加/编辑/删除Fitters.工人和员工表自动更新(级联). 它工作正常:当我添加新的Fitter时,所有更改都会到达数据库中的所有表.但是当我想通过Django管理工具编辑任何Fitter时,我会去编辑Fitter页面,我看到填充字段不正确. 例如: >在Staffs表中,我有“John Smith”,id = 41 当我去编辑Fitter“John Smith”页面时,我看到所有字段都填充了“Kevin Thomas”(员工表中的id = 21!). 我该如何解决? 这是我的草案代码: class Staffs(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=135,blank=True) surname = models.CharField(max_length=135,blank=True) def __unicode__(self): return self.name + " " + self.surname class Meta: db_table = u'staffs' class Workers(Staffs): idWorker = models.AutoField(primary_key=True,db_column='id') staffs_idstaff = models.OneToOneField('Staffs',db_column='Staffs_idstaff',parent_link=True) brigades_idbrigade = models.ForeignKey('Brigades',db_column='Brigades_idBrigade') def __unicode__(self): return self.staffs_idstaff.name + " " + self.staffs_idstaff.surname class Meta: db_table = u'workers' class Fitters(Workers): idFitter = models.AutoField(primary_key=True,db_column='id') qualification = models.CharField(max_length=135,blank=True) workers_idworker = models.OneToOneField('Workers',db_column='Workers_idWorker',parent_link=True) def __unicode__(self): staff = self.workers_idworker.staffs_idstaff return staff.name + " " + staff.surname class Meta: db_table = u'fitters' EDIT1: 我试着像这样改变我的代码: class Staffs(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=135,blank=True) class Meta: db_table = u'staffs' class Workers(Staffs): idWorker = models.AutoField(primary_key=True) brigades_idbrigade = models.ForeignKey('Brigades') class Meta: db_table = u'workers' class Fitters(Workers): idFitter = models.AutoField(primary_key=True) qualification = models.CharField(max_length=135,blank=True) class Meta: db_table = u'fitters' 现在很简单.我同步了我的数据库,但我有完全相同的问题! EDIT2: 我的admin.py文件的一部分: from django.contrib import admin from appclient.models import * admin.site.register(Fitters) admin.site.register(Staffs) admin.site.register(Workers) ... 解: 解决方案是我不需要为每个模型使用我自己的id和ForeignKey. Djando自动为每个模型创建特殊字段,并将其用作id(PrimaryKey)和链接到父表(ForeignKey). 这是解决方案: class Staffs(models.Model): name = models.CharField(max_length=135,blank=True) class Meta: db_table = u'staffs' class Workers(Staffs): brigades_idbrigade = models.ForeignKey('Brigades') class Meta: db_table = u'workers' class Fitters(Workers): qualification = models.CharField(max_length=135,blank=True) class Meta: db_table = u'fitters' 感谢所有帮助过我的人. 解决方法
这看起来有些奇怪.但是,据我所知,当使用
multi-table inheritance时,Django会自动设置父母和子女之间所需的一对一映射.正如你手动设置的那样,很可能会引入某种不一致性因此.
如果你直接看一下数据库,两个不同的一对一关系是否一致? 如果从模型中删除显式的一对一字段会发生什么? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |