2017-07-27 18 views
0

的情況下的一組/列表中的字段類型考慮以下三種模式:Django模塊:用於製造另一種模式

class Statement(models.Model): 
    statement_id = models.CharField(max_length=200) 
    title = models.CharField(max_length=200) 
    statement-keywords = ? 
    statement-contexts = ? 

class Keyword(models.Model): 
    word = models.CharField(max_length=200) 
    statement = models.ManyToManyField(Statement) 
    def __str__(self): 
     return self.word 

@python_2_unicode_compatible 
class Context(models.Model): 
    context_word = models.CharField(max_length=200) 
    keyword = models.ManyToManyField(Keyword) 
    statement = models.ManyToManyField(Statement) 
    def __str__(self): 
     return self.context_word 

每條語句都應該有一組相關的關鍵詞和上下文。我也主要在本網站的管理界面上工作,並希望確保有人可以在同一頁面的關鍵字和上下文中輸入更新或提交新頁面。

這將是理想的,如果我能做出聲明的關鍵字舉行集中的所有Keywords的年代,和statement_contexts持有一套所有相關的關鍵字這一聲明實例,和語句的上下文持有集中的所有Context的的與該聲明相關聯。但也有拿出來我兩個問題:

  1. 因爲聲明是上方的關鍵字和上下文,我不能引用關鍵詞和上下文關係中一個多對多關係的對象。如果我這樣做,我會收到一條錯誤消息。如果我在關鍵字和上下文中移動Statement,那麼Keyword和Context都將無法生成引用語句(我會收到錯誤消息)。

  2. 我不知道是否有可以說「此字段將持有一組對象」的字段類型或替代字段類型。

回答

0

您不需要這些字段中的任何一個。您已擁有它們:它們是關鍵字和上下文上ManyToManyFields的反向關係。

+0

有兩個字段的好處之一是爲了管理界面。現在在語句提交/更新頁面上,沒有關於與語句關聯的關鍵字和上下文的信息出現。我知道我可以做一個反向關係查詢,但是......如果語句模型只有關鍵字和上下文的字段,這將是最簡單的。我也不知道如何使用反向關係來更改語句模型或影響其在管理員上的顯示。 –

+0

這正是[內嵌管理員](https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#inlinemodeladmin-objects)的用途。 –