gpt4 book ai didi

python - Django admin - 编辑页面上的模型对象错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:52 24 4
gpt4 key购买 nike

我有 3 个继承的类(Fitters -> Workers -> Staffs)与我的数据库中的表相关联(复数形式的类名,但现在这并不重要)。

用户只能添加/编辑/删除装配工。 Workers 和 Staffs 表会自动更新(级联)。

它工作正常:当我添加新的 Fitter 时,所有更改都会出现在数据库中的所有表中。但是,当我想通过 Django 管理工具编辑任何 Fitter 时,我去编辑 Fitter 页面时看到填写不正确的字段。

例如:

  • 在 Staffs 表中,我有 id=41 的“John Smith”
  • 在 Workers 表中,我有 id=21 和 ForeignKey=41 的记录(给 John Smith)
  • 在 Fitters 表中我有 id=5 和 ForeignKey=21 的记录(记录在 Workers 表中)

当我去编辑 Fitter“John Smith”页面时,我看到所有字段都由“Kevin Thomas”填充(Staffs 表中的 id=21!)。所以,Django 错过了 Workers 表,直接转到了 Staffs 表。

我该如何解决?

这是我的草稿代码:

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'

编辑 1:

我试着像这样更改我的代码:

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)

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'

现在很简单了。我同步了我的数据库,但我遇到了完全相同的问题!

编辑 2:

我的 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)
surname = 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'

感谢所有帮助过我的人。

最佳答案

这看起来确实有些奇怪。然而,据我所知,Django 会在使用 multi-table inheritance 时自动设置父子之间所需的一对一映射。 .由于您还手动设置了这些,因此很可能会因此引入某种不一致。

如果直接在数据库中看一下,这两个不同的一对一关系是否一致?

如果您从模型中删除显式的一对一字段会怎样?

关于python - Django admin - 编辑页面上的模型对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13949244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com