【问题标题】:How to store list of tuples in Django model?如何在 Django 模型中存储元组列表?
【发布时间】:2016-07-15 02:10:39
【问题描述】:

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

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

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

但他不能从英语翻译成德语或荷兰语。

所以我可能要寻找的是存储模型元组的字段(有一个模型称为语言)。

【问题讨论】:

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


【解决方案1】:

我推荐的解决方案是创建一个模型来表示每个单向翻译,然后使用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')
   ...

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

这将允许您轻松查询所有可以翻译特定语言的翻译者,因为实际翻译是一个对象。我还建议将语言存储在 CharFields 中,而实际上创建另一个 Language 模型并将 LanguagePair 模型更改为具有两个 ForeignKey 字段的语言。

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

【讨论】:

  • 谢谢,这可能是一个很好的解决方案,但我想让它尽可能简单。我选择这种方式。还有一个问题——你为什么把 LanguagePair 作为一个字符串而不是行类?
  • 习惯...但是在那个例子中你是对的,没有必要。我还认为这 最简单的解决方案,它让您无需解码任何内容即可进行查找,并为您提供更好的性能。如果您将来需要做更复杂的事情,它也更加灵活。
猜你喜欢
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2013-04-09
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多