저는 현재 각 레코드에 많은 정보 (50-60 필드 정도)가 많은 클라이언트를위한 앱을 만들고 있습니다.복잡한 Django 모델 구성
데이터를 좀 더 구조화 할 수 있도록 모델을 섹션으로 나누고 싶습니다.
내 첫 번째 시도는 다음과 같이 뭔가를 할 수 있습니다 :
class Program(models.Model):
class BookingInformation(models.Model):
program = models.OneToOneField('Program', related_name='booking_information')
producer = models.CharField(max_length=100, blank=True)
producer_phone = models.CharField(max_length=30, blank=True)
...
class Editorial(models.Model):
program = models.OneToOneField('Program')
series = models.CharField(max_length=100, blank=True)
...
나는 5 개 정도 섹션을 가지고 있으며 그들 중 일부는 중첩됩니다.
이 방법을 사용하면 프로그램 개체를 가질 수 있으며 해당 필드에 접근하려면 program.booking_information.producer
을 수행하십시오. 또한 ModelForm
을 사용하여 각 섹션에 대해 별도의 양식을 제공 할 수 있습니다 (원하는 내용).
개체를 만들 때 어려움이 발생합니다. 프로그램 개체를 만들 때 Program.BookingInformation 개체가 아직 존재하지 않기 때문에 먼저 기본 키를 가져 와서 프로그램을 저장하지 않고 만들 수 없습니다. 그리고 나서 그들은 절대적으로 필요한 것이 아닌 this which appear to discourage the use of OneToOneFields과 같은 것을 읽습니다.
하나의 모델에 전체를 넣어야합니까? 이 모든 분야를 가진 큰 테이블 하나를 가지고있는 것이 지저분 해 보입니다. 그렇지만이 데이터베이스에 대해 상당히 새로운 것입니다.
[Python의 Zen] (http://www.python.org/dev/peps/pep-0020/) - 평면이 중첩 된 것보다 낫습니다. 또한 중첩 모델이 실제로 필요한지는 의심 스럽습니다. – karthikr
@karthikr 이유를 정교하게 신경 쓰시겠습니까? – joerick
모델이 얼마나 복잡한 지 상관없이 중첩 모델이 필요하지 않습니다. 다시 생각해보고 평면 구조를 만들 수 있습니다. 응용 프로그램/모델을 보지 않고 변경해야 할 내용을 말하기는 어렵습니다. – karthikr