2017-03-09 161 views
0

你好夥計我新的Django(我剛剛完成了教程),但我想我理解它的基本概念。我寫在這裏,因爲我試圖做一些「困難」使用Django的經驗和搜索互聯網沒有給我一個解決方案。我試圖做的是創建一個基於另一個模型的條目數量的動態模型。更準確地說,我可以說我有以下型號:基於查詢的動態Django模型

class criteria(models.Model): 
      criteria_text = models.CharField(max_length=200) 
      monotonicity = models.CharField(max_length=1,choices=(('+','ASCEDING'),('-','DESCENDING')),default='+',verbose_name='Monotonicity') 
      worst = models.IntegerField(default=0) 
      best = models.IntegerField(default=0) 

我想要做的是通過django管理面板創建所需的所有標準模型實例,然後查詢數據庫中的所有creteria_text實例,併爲每個criteria_text實例創建一個具有屬性的模型。

因此,可以說我將以下條件添加到數據庫中(這些標準criteria_text屬性的對象:顏色,重量,價格

我想用這樣的模型就結了。

class Alternative(models.Model): 
    Color = models.IntegerField(default=0) 
    Weight = models.IntegerField(default=0) 
    Price = models.IntegerField(default=0) 

的事情是,在我的應用程序這其中有情況發生了很多次,所以我不能讓模型每次有人添加了基於不同標準的替代品。

搜索我發現我可以定義使用動態模型後格式如下:

attrs = { 
     'name': models.CharField(max_length=32), 
     '__module__': 'myapp.models' 
    } 
    Animal = type("Animal", (models.Model,), attrs) 

所以,問題是我如何定義基於該得到所有標準數據庫查詢「ATTRS」?我可以定義與其他模型這個動態模型的關係?另外,如果用戶添加更多標準,則應該更新已創建的模型。

是這樣的可能嗎? 如果是這樣,請告訴我路徑。

+0

我不認爲定義動態模型是一個很好的解決方案(或任何地方,真的)。相反,您需要一個可以擁有與標準實例一樣多的項目的關係。 –

+0

模型類定義不會在數據庫中創建任何表格,除非您遷移它。您可以動態創建類,但是任何模型操作都會導致錯誤 –

+0

@Daniel Roseman:我有點困惑,關係是寫在模型上的嗎?我仍然需要更新模型本身。也可以說,你說的是有效的,那麼我將不得不手動爲每條標準逐行添加值,並選擇標準。我期望的是獲得整數字段在上面的標準文本的單行上。如果我錯過了某些東西或我在路上,請阻止我。 –

回答

0

我不認爲定義動態模型是一個很好的解決方案(或任何地方,真的)。相反,您需要一個可以擁有與標準實例一樣多的項目的關係。

這可能是這樣的:

class Alternative(models.Model): 
    name = models.CharField(...) 
    choices = models.ManyToManyField("Criteria", through="AlternativeChoice") 

class AlternativeChoice(models.Model): 
    alternative = models.ForeignKey('Alternative') 
    criteria = models.ForeignKey('Criteria') 
    value = models.IntegerField(default=0) 

真正的邏輯會的形式,在那裏你將需要爲每個標準輸入選項屬於,並驗證AlternativeChoice依賴於相關的標準。