如何在Django模型中存储元组列表?

时间:2016-03-27 19:43:53

标签: python django django-models many-to-many

是否可以在Django中存储Model元组的字段?就我而言,我有一个模型翻译。翻译人员应存储有关他可以翻译的语言的信息。但是可能存在翻译人员无法从英语翻译成德语的情况,但是他/她可以在相反的方向上做到这一点。

所以一个对象翻译器可以存储它:

  • 从德语到英语
  • 从荷兰语到英语

但他无法将英语翻译成德语或荷兰语。

所以我可能正在寻找的是存储模型元组的字段(有一个名为Language的模型)。

1 个答案:

答案 0 :(得分:4)

我建议的解决方案是创建一个模型来表示每个单向翻译,然后使用ManyToManyField关系。

例如:

class LanguagePair(models.Model):
   from_language = models.CharField(max_length=220)
   to_language = models.CharField(max_length=220)

class Translator(models.Model):
   languages = models.ManyToManyField('LanguagePair')
   ...

因此每个译者都会有多个与之关联的LanguagePair对象,代表他们可以翻译的语言。

这将允许您轻松查询可以翻译特定语言的所有译员,因为实际翻译是对象。我还建议您在CharField s中存储语言时实际制作另一个Language模型,并将LanguagePair模型更改为该语言有两个ForeignKey字段。

另一种解决方案是序列化标准python列表中的列表或语言对,并将其作为JSON字符串存储在CharField中,但这会使查询更加困难,并且可能成为未来的问题。通常不要害怕将逻辑划分为单独的模型,因为这会导致更灵活和可扩展的方法。