2017-07-07 56 views
1

假設我正在編寫一個應用程序來更改機器中的配置。我有3個創建的表格,如下所示。機器配置顯示了我們機器的當前配置狀態。用戶可以創建他們的票據並請求更改配置。 RequestDetails將保留提出的配置表以及一些額外的信息,例如請求者名稱,日期等。在django模型中使用類作爲另一個類的一部分

這些類只是一個簡單的例子,在真正的模型中,我將有近600 + fields = configuration在類MachineConfiguration中提供。我也應該在RequestDetails類中有完全相同的字段。我想知道當涉及到MachineConfiguration模型中存在的所有字段時,在定義類RequestDetails時不要重複MYSELF?

我想以一種方式編寫它,如果我在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) 

回答

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() 
+0

我在這種情況下,猜測類NewModel將創建一個只有field3的表,field1和field2將在表BaseModel中創建,這不是我想要的。我想創建兩個表中的每個表中的所有字段。這兩個表格必須相互獨立。如果abstract = True,我不希望在NewModel中指向field1和field2的指針字段 – Ibo

+0

,那麼django不會爲該類創建表。這不是我想要的。我需要爲這兩個類創建表。看到這個django文檔:https://docs.djangoproject.com/en/1.11/topics/db/models/#abstract-base-classes – Ibo

+0

這就是我在回答中所說的。假設你想創建5個帶有3個相同字段的模型,在你想創建數據庫表的模型中繼承這個模型 – Aniket

相關問題