2016-04-08 11 views
0

私は翻訳者のためのウェブ上で働いています。私はデータの構造を設計することに固執しています。そのため、Translator、Language、Levelというモデルがあります。価格は各翻訳は異なるレベル(スキル)と、複数の言語を翻訳することができモデルのタプルのフィールドをDjangoモデルに保存する方法は?

(標準レベルは、価格の1倍、1.5倍プロフェッショナルなどを乗算)言語とレベルに依存します。

私は、この目的のためにモデルを設計する方法を見つけ出すことはできません。私の考えでは、各翻訳のためのタプル(言語、レベル)のいくつかのフィールドを格納することであるので、モデルトランスレータは次のようになります。私はこの問題を解決するためにどのように何かアドバイスをいただければ幸いです

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はもちろん存在しません。) 。たぶん、これを行う簡単な方法があります。

答えて

2

私はLevelTranslatorProfileLanguage間の多対多の関係のためにスルーモデル上のフィールドでなければならないことだと思う:

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') 
+0

実際には、これは機能しません。 「TranslatorLanguage」は定義されていないと言われています。 'TranslatorProfile'は 'TranslatorLanguage'の前に定義されていますが、それを呼び出そうとしているためです。そして、私はこの2つのモデルを交換するとき、同じだが反対の問題。 「TranslatorLanguageは」「TranslatorProfile」の前に存在する場合、それはTranslatorProfile 'が定義されていません... –

+0

まあ、一般的なルールとして、あなたは文字列 '' app_name.model_nameように、モデルの関連フィールドの提供しなければならないと述べています''これらの問題を避けるために。 – schwobaseggl

関連する問題