我有3個繼承類(Fitters - > Workers - > Staffs)與我的數據庫中的表(類名複數,但現在不重要)連接。Django管理員 - 錯誤的模型對象在編輯頁
用戶只能添加/編輯/刪除鉗工。工作人員表自動更新(級聯)。
它工作正常:當我添加新的Fitter時,所有更改都會發送到數據庫中的所有表。但是,當我想通過Django管理工具編輯任何Fitter時,我要編輯Fitter頁面,並且看到填充不正確的字段。
例如:
- 在職員表我有 「約翰·史密斯」 使用id = 41
- 在工人表我有ID的記錄= 21和ForeignKey的= 41(約翰史密斯)
- 在鉗工工作臺我有ID的記錄= 5和ForeignKey的= 21(在工表記錄)
當我去編輯鉗工「約翰·史密斯」頁面上,我看到「凱文填寫所有領域托馬斯「(編號= 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'
EDIT1:
我試圖改變這樣的我的代碼:
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'
現在很簡單。我同步了我的數據庫,但我有完全相同的問題!
EDIT2:
我的admin.py文件的部分:
from django.contrib import admin
from appclient.models import *
admin.site.register(Fitters)
admin.site.register(Staffs)
admin.site.register(Workers)
...
SOLUTION:
解決辦法是,我不需要用我自己的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'
謝謝大家誰幫助了我。
爲什麼使用OnetoOneFields?你有理解模型繼承的問題,還是你需要在現有的數據庫表上安裝django模型? –
@ChristianThieme是的,我有現有的數據庫,我需要爲數據庫管理創建簡單的用戶應用程序。 –
你能告訴我們你的admin.py文件嗎? –