2016-03-27 13 views
0

ModelのタプルのフィールドをDjangoに保存することはできますか?私の場合は、Translatorというモデルがあります。翻訳者は、翻訳できる言語に関する情報を保存する必要があります。しかし、翻訳者が英語からドイツ語に翻訳できない状況があるかもしれませんが、逆の方向に翻訳を行うことができます。英語 Djangoモデルにタプルのリストを格納するには?

に英語オランダ語から

  • にドイツから

    • を彼は英語からドイツ語やオランダ語に変換することはできません。

      だから、一つのオブジェクトの翻訳者は、これを保存することができます。

      私が探しているのは、モデルのタプルのフィールドを格納することです(Languageというモデルがあります)。

  • +0

    なぜ複数の列を格納できるだけのときにタプルを格納する必要がありますか? from-lan to-lan from-str to-str – dkarchmer

    +0

    または、酸漬けやJSONFieldの使用を見てください。 https://pypi.python.org/pypi/django-picklefieldとhttps://github.com/bradjasper/django-jsonfield –

    答えて

    3

    それぞれの一方向の変換を表すモデルを作成してから、の関係を使用することをお勧めします。例えば

    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に言語を格納する代わりに、実際に別のLanguageモデルを作成し、LanguagePairモデルを2つのForeignKeyフィールドに変更することをお勧めします。

    標準のPythonリストからリストまたは言語のペアをシリアル化し、CharFieldにJSON文字列として格納することもできますが、これはクエリを難しくし、将来問題になる可能性があります。一般的には、ロジックを別々のモデルに分けるのを恐れない方が、より柔軟でスケーラブルなアプローチにつながります。

    +0

    ありがとう、これはおそらく良い解決策ですが、できるだけシンプルにしたいと思っていました。私はこの方法を選ぶ。もう1つの質問 - なぜあなたは行クラスではなく文字列としてLanguagePairを入れますか? –

    +0

    ちょうど習慣...文字列を使用すると、その後に定義されたモデルを参照することができます。また、他のアプリからモデルを参照することもできます。そのようなものは、 'app.LanguagePair'のようにインポートする必要がありません。しかし、その例ではあなたは正しいです。それは必要ではありませんでした。私はこれも*最も簡単な解決策だと主張します。それは何かをデコードせずにルックアップを行い、より良いパフォーマンスを提供します。また、将来的にはもっと複雑なことをする必要がある場合にも柔軟性があります。 – joshcarllewis

    関連する問題