如何在Django模型中创建类

时间:2014-03-27 07:03:01

标签: django

由于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

答案的主要关键是创建一个包含多个类的模型,这些类将映射到数据库中的一个表。

1 个答案:

答案 0 :(得分:2)

只有Django没有办法做到这一点。 Django模型代表平坦的关系数据库。扩展模型框架以提供超出其后端能力的功能是不必要的,因此不在默认框架中实现。

有第三方软件包可以提供您想要的内容,但据我所知,这些软件包使用能够使用此类数据结构的数据库后端。

就个人而言,我会选择你的第一个例子,一个代表我所有Employee数据的扁平单一模型。防止字段名称出现任何歧义,并且在嵌套模型上使用平面模型不会有任何成本。

请记住:过早优化比连接语句贵很多。