如何在Django模型中存储模型元组的字段?

时间:2016-04-08 11:15:44

标签: python django django-models

我正在为翻译工作。我一直致力于设计数据结构。所以有一个模型翻译,语言和水平。价格取决于语言和水平(标准水平乘以1x,专业1.5x等价格)

每位译员都可以翻译不同级别(技能)的多种语言。

我无法弄清楚如何为此目的设计模型。我的想法是为每个翻译器存储一些元组字段(语言,级别),因此模型翻译器将是:

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

我很感激如何解决这个问题(。FieldOfModelTuples当然不存在)。也许有一种更简单的方法可以做到这一点。

1 个答案:

答案 0 :(得分: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')