【发布时间】:2013-08-08 18:13:48
【问题描述】:
我目前正在为客户构建一个应用程序,其中每条记录都有大量不同的信息(大约 50-60 个字段)与之关联。
我想将模型分成多个部分,以便数据更有条理。
我的第一次尝试是做这样的事情:
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 对象时, Program.BookingInformation 对象还不存在,如果不先保存 Program 就无法创建它(因此它会获得一个主键)。然后我会在不是绝对必要的时候阅读this which appear to discourage the use of OneToOneFields 之类的内容。
我应该把所有东西都放在一个模型中吗?一张包含所有这些字段的大表对我来说似乎很乱,但是我对这个数据库的东西还很陌生。
【问题讨论】:
-
Zen of Python - 扁平比嵌套更好。另外,我怀疑这里是否真的需要嵌套模型。
-
@karthikr 你愿意详细说明原因吗?
-
无论模型多么复杂,我都认为不需要嵌套模型。你可以重新考虑它并建立一个扁平的结构。如果不了解应用程序/查看模型,很难说出要更改的内容
标签: database django django-models