由于Django将每个模型映射到一个表。我无法在我的代码中创建包。在哪里我可以包装类的部分,使其更合理,并增加耦合。
例如
class Employee(models.Model):
#personal information
first_name = models.CharField(max_length=20)
middle_initial = models.CharField(max_length=1)
last_name = models.CharField(max_length=20)
dob = models.DateField()
#job contract information
full_time = models.BooleanField()
hours_per_day = models.PositiveSmallIntegerField()
#.. and more
我想做的是这个
employee.job.is_full_time
employee.job.get_hours_per_day
# and more
然而,这意味着我必须创建一个新模型并使用OneToOneField
将其与员工模型相关联。我不想这样做..加入数据库是很昂贵的。反正有没有创造这样的东西?
class Employee(models.Model):
class PersonalInformation:
first_name = models.CharField(max_length=20)
middle_initial = models.CharField(max_length=1)
last_name = models.CharField(max_length=20)
dob = models.DateField()
class Job:
full_time = models.BooleanField()
hours_per_day = models.PositiveSmallIntegerField()
#.. and more
答案的主要关键是创建一个包含多个类的模型,这些类将映射到数据库中的一个表。
答案 0 :(得分:2)
只有Django没有办法做到这一点。 Django模型代表平坦的关系数据库。扩展模型框架以提供超出其后端能力的功能是不必要的,因此不在默认框架中实现。
有第三方软件包可以提供您想要的内容,但据我所知,这些软件包使用能够使用此类数据结构的数据库后端。
就个人而言,我会选择你的第一个例子,一个代表我所有Employee
数据的扁平单一模型。防止字段名称出现任何歧义,并且在嵌套模型上使用平面模型不会有任何成本。
请记住:过早优化比连接语句贵很多。