내 데이터베이스의 테이블과 연결된 3 개의 상속 된 클래스 (Fitters -> Workers -> Staffs)가 있습니다 (클래스 이름은 복수형이지만 현재 중요하지는 않습니다).Django admin - 편집 페이지의 잘못된 모델 개체
사용자는 Fitters 만 추가/수정/제거 할 수 있습니다. 근로자 및 직원 테이블은 자동으로 (계단식으로) 업데이트됩니다.
새로운 Fitter를 추가하면 모든 변경 사항이 데이터베이스의 모든 테이블에 적용됩니다. 하지만 Django 관리 도구를 통해 모든 수정자를 편집하려면 수정 자 페이지로 이동하고 입력란이 잘못 표시됩니다. 예를 들어
: 스태프 테이블에서
- 내가 "존 스미스"가 ID = 근로자 표 41
- I가 = 21, 외래 키 = 41 (존 스미스) ID를 가진 레코드가 와 나는 배관공 "존 스미스"페이지를 편집 할 갈 때 설치자 테이블에서
- 나는 = 5와 외래 키 = 21
(노동자 테이블의 레코드) id를 가진 기록을 가지고, 나는 케빈 "에 의해 작성 모든 필드를 참조 토마스 "(직원 = 테이블에서 id = 21!). 그래서 장고는 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)
...
해결책 :
솔루션은 내가 각각에 대해 내 자신의 ID 년대와 외래 키의를 사용할 필요가 없습니다 것입니다 모델. 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를 사용합니까? 모델 상속을 이해하는 데 문제가 있거나 기존 데이터베이스 테이블에 장고 모델을 적용해야합니까? –
@ChristianThieme 예, 기존 데이터베이스가 있으므로 데이터베이스 관리를 위해 간단하게 사용자 응용 프로그램을 만들어야합니다. –
admin.py 파일도 함께 보여 주실 수 있습니까? –