2016-04-08 29 views
0

Tercüme için web üzerinde çalışıyorum. Verilerin bir yapısını tasarlarken sıkışıp kaldım. Yani bir model Tercüman, Dil ve Seviye var. Fiyat, Dil ve Seviyeye bağlıdır (Standart seviye 1x, Profesyonel 1.5x vb. Fiyatı çarpar)Django modellerinde model tuples alanı nasıl saklanır?

Her Çevirmen, farklı düzeylerde (beceriler) birden çok dili çevirebilir.

Modellerin bu amaç için nasıl tasarlanacağını anlayamıyorum. Benim fikrim her Çevirmen bazı dizilerini alanını (Dil, Level) böylece modeli Çevirmen olacağını saklamaktır: (. FieldOfModelTuples tabii da mevcut değil) Bu sorunu çözmek için nasıl herhangi bir tavsiye takdir ediyorum

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 

. Belki bunu yapmanın daha basit bir yolu vardır.

cevap

2

Ben Level üzerinde bir alan olması gerektiğini düşünüyorum geçiş modeline TranslatorProfile ve Language arasında bir çok-çok ilişkisi için: Bu her Translator için gerekli tüm özelliklere sorgusu sağlar

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'),) 

- Language çift. Bir çevirmenin dillerine erişim daha sonra şu şekilde basitleştirilebilir:

# HERE IS THE PROBLEM 
languages = models.ManyToManyField(Language, through='TranslatorLanguage') 
+0

Aslında, bu çalışmaz. 'TranslatorLanguage' tanımlanmadı diyor. Çünkü 'TranslatorProfile', 'TranslatorLanguage'den önce tanımlanmıştır, ancak bunu çağırmaya çalışır. Ve bu iki modele geçtiğimde aynı ama karşıt problem. 'TranslatorProfile' öncesinde 'TranslatorLanguage' varsa, 'TranslatorProfile' tanımlanmamıştır ... –

+0

Genel kural olarak, bir ilişki alanının modelini 'String' 'app_name.model_name olarak belirtmelisiniz. 'bu sorunları önlemek için. – schwobaseggl

İlgili konular