2016-04-08 104 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

相关问题