2016-04-08 140 views
0

我正在爲翻譯人員開發網絡。我被困在設計數據結構上。所以有一個模型翻譯,語言和水平。價格取決於語言和水平(標準水平乘以價格1倍,專業1.5倍等)如何在Django模型中存儲模型元組的字段?

每個翻譯可以翻譯不同級別(技能)的多種語言。

我無法弄清楚如何爲此設計模型。我的想法是存儲每個翻譯的元組的一些領域(語言,級別),因此模型轉換器將是:(FieldOfModelTuples不存在,當然)

class TranslatorProfile(models.Model): 
    user = models.OneToOneField(User, related_name='userprofile') 
    date_of_birth = models.DateField(null=True,blank=True) 
    telephone = models.CharField(max_length=40,null=True,blank=True) 
    IBAN = models.CharField(max_length=40,null=True,blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    # HERE IS THE PROBLEM 
    languages = models.FieldOfModelTuples(Language,Level) 

class Level(models.Model): 
    LEVEL_NAMES = (
      ('standard', 'Standard'), 
      ('professional', 'Professional'), 
      #etc. 
     ) 
    name = models.CharField(max_length=40, choices=LEVEL_NAMES) 
    price_multiplier = models.FloatField() 

class Language(models.Model): 
    shortcut = models.CharField(max_length=40) 
    name = models.CharField(max_length=40) 

    def __str__(self): 
     return self.name 

我將不勝感激任何建議如何解決這個問題。也許有一個更簡單的方法來做到這一點。

回答

2

我認爲Level應該是在現場通模型TranslatorProfileLanguage之間的許多一對多的關係:

class TranslatorLanguage(models.Model): 
    translator = models.ForeignKey('app_name.TranslatorProfile') 
    language = models.ForeignKey('app_name.Language') 
    level = models.ForeignKey('app_name.Level') 

    class Meta: 
     unique_together = (('translator', 'language'),) 

這使您可以查詢所有必要的屬性爲每個Translator - Language對。訪問譯員的語言可以通過以下簡化:

# HERE IS THE PROBLEM 
languages = models.ManyToManyField(Language, through='TranslatorLanguage') 
+0

事實上,這是行不通的。它說'TranslatorLanguage'沒有定義。這是因爲'TranslatorProfile'是在'TranslatorLanguage'之前定義的,但它試圖調用它。當我使用這兩個模型時,會出現相同但相反的問題。如果在'TranslatorProfile'之前有'TranslatorLanguage',它表示'TranslatorProfile'沒有被定義... –

+0

那麼,作爲一般規則,您應該將關係字段的模型作爲字符串''app_name.model_name ''以避免這些問題。 – schwobaseggl

相關問題