【问题标题】:Using a class as a part of another class in django models在 django 模型中使用一个类作为另一个类的一部分
【发布时间】:2017-07-07 07:32:45
【问题描述】:

假设我正在编写一个应用程序来更改机器中的配置。我有 3 个创建的表,如下所示。机器配置显示了我们机器的当前配置状态。用户可以创建他们的票证并请求更改配置。 RequestDetails 将是保留建议配置的表格以及一些额外信息,例如请求者的姓名、日期等。

这些类只是一个简单的示例,在真实模型中,我将在 MachineConfiguration 类中显示近 600 多个字段=配置。我也应该在 RequestDetails 类中有完全相同的字段。我想知道当涉及到 MachineConfiguration 模型中存在的所有字段时,在定义类 RequestDetails 时有一种方法不要重复我自己吗?

我想这样写,如果我更改了 MachineConfiguration 表中的任何内容,同样的更改也将适用于 RequestDetails 表。

提前感谢您的帮助。

class RequestTicket(models.Model):
    subject=models.CharField(max_length=50, null=False, blank=False)
    description=models.TextField(null=False, blank=True)

class MachineConfiguration(models.Model):
    field_1 = models.CharField(null=False,blank=True)
    field_2 = models.CharField(null=False, blank=True)
    field_3 = models.CharField(null=False, blank=True)

class RequestDetails(models.Model):
    tracking_number=models.ForeignKey('RequestTicket')
    field_A=models.DateField(null=True, blank=False)
    field_B=models.TextField(null=True, blank=False)
    field_1 = models.CharField(null=False, blank=True)
    field_2 = models.CharField(null=False, blank=True)
    field_3 = models.CharField(null=False, blank=True)

【问题讨论】:

    标签: python django class django-models


    【解决方案1】:

    是的,您可以创建基类并在另一个类中继承该类,例如,

    class BaseModel(models.Model):
        field1 = models.CharField()
        field2 = models.CharField()
    
        class Meta:
            abstract = True
    

    并在另一个模型中继承这个类以获得相同的字段,

    # Now if you change any field in BaseModel, it will reflect in both the models
    class MachineConfiguration(BaseModel):
        pass
    
    class RequestDetails(BaseModel):
        field3 = models.CharField()
    

    【讨论】:

    • 我猜在这种情况下,NewModel 类将创建一个只有 field3 的表,并且 field1 和 field2 将在表 BaseModel 中创建,这不是我想要的。我想用每个表中的所有字段创建两个表。这两个表必须相互独立。我不想让 NewModel 中的指针字段指向 field1 和 field2
    • 如果 abstract=True 则 django 不会为该类创建表。这不是我想要的。我需要为这两个类创建表。请参阅 django 文档:docs.djangoproject.com/en/1.11/topics/db/models/…
    • 这就是我在回答中所说的。假设如果您想创建 5 个具有 3 个相同字段的模型,请在要创建数据库表的模型中继承此模型
    • 像创建base_model.py文件并在models.py中继承Model MachineConfiguration和RequestDetails中的基本模型
    • 听起来不错,让我检查一下,然后我会将你的答案标记为正确的
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多