我正在为翻译工作。我一直致力于设计数据结构。所以有一个模型翻译,语言和水平。价格取决于语言和水平(标准水平乘以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
当然不存在)。也许有一种更简单的方法可以做到这一点。
答案 0 :(得分:2)
我认为Level
应该是直通模型中的字段,用于TranslatorProfile
和Language
之间的多对多关系:
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')