2017-02-02 8 views
1

翻訳されたテキストフィールドを持つモデルがあります。今問題は、私はしばしば 'いくつかの'言語の翻訳を持っていないと私はすでにモデルを公開したいと思います。ターゲットモデルがdjangoのタプルである場合に多対多の関係をモデル化する方法はありますか?

簡単に(デフォルトでは)アウトAY(Djangoのモデルの翻訳に従って)デフォルトの言語にフォールバックすることであるが、実際に、私は明示的に言語のためのインスタンスを有効にすると思っています。これは、設定からLANGUAGESタプルとの多対多の関係が好きです。だから、基本的にはCharFieldのような選択肢がLANGUAGESに設定されていますが、多くの方法で選択されます。

ひとつのアイデアは、このための言語モデルを追加し、標準の多対多の関係を作成することです。しかし、私は言語コード自体を除いて追加するものは何もないので、それは正しく感じません。モデルを追加なぜこれほど....

別の方法としては、PickleFieldを適用し、[]言語コードのシリアライズすることです。何の検証が

誰もこの問題に関する考え方は...などがないようしかし、それは明らかに速い/汚いソリューションですか?

ポール

答えて

0

あなたはPostgresのを使用している場合は、あなたが選択した言語コードのリストを保存するために、DBの組み込み配列のサポートにマップArrayFieldを、使用することができます。

はない場合、それはコードのカンマ区切りのリストを格納し、へ/リストからそれを翻訳カスタムフィールドを記述することは比較的簡単です - サードパーティの実装は、すでにそこにおそらくあります。

0

あなたはJSONを使って文字列に言語コードのリストを変換し、それを文字列として保存することができます。このために、モデルにモデルメソッドを追加することができます。

import json 

class Product(models.Model): 
    languages = models.CharField(max_length=200) 

    def set_languages(self, list_of_language_codes): 
     self.languages = json.dumps(list_of_language_codes) 

    @property 
    def get_languages(self): 
     return json.loads(self.languages) 

次に、オブジェクトを保存した後、言語コードのリストをset_languages()メソッドを呼び出す -

object.set_languages(list_if_language_codes)  
object.save() 
+0

これは、管理インタフェースを使用して、選択した言語を制御することはできません。また、私は現在の言語が指定されている有効なインスタンスを照会できるようにしたい。 –

0

うーん、私は両方の非常に簡単です解決策を見つけた、とadminに制御することができますviews +インスタンスが特定の言語に対して有効になっているかどうかを問い合わせることもできます。

解決策はモデル変換自体(django-modeltranslation.readthedocs.io/en/latest/...)で提供されています。単純にブール値フィールドを作成し、変換するフィールドよりもレジスタを作成すると、enabled_フィールドそれぞれ....!

class <model>TranslationOptions(TranslationOptions): 
    fields = ('name', 'slug', 'enabled', ...) 

translator.register(... 
関連する問題