2016-04-11 12 views
1

through-models ile Django numaralı telefondan nasıl çalışılacağını öğrenmek için öznitelikleri daha rahat bir şekilde alabiliyorum. Bu models'u kullanarak bazı öznitelikleri nasıl alacağımı biliyorum, ancak sezgisel değil ve bunları nasıl alacağımı hatırlamak zor.Django'da model kullanarak niteliklere nasıl erişilir?

benim durumumda Örneğin

:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, related_name='userprofile') 
    is_translator = models.BooleanField(default=False) 
    languages = models.ManyToManyField(Language, through='UserProfileLanguage') 

    def __unicode__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 

    def __str__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 


class Language(models.Model): 
    shortcut = models.CharField(max_length=40) 
    name = models.CharField(max_length=40) 

    def __str__(self): 
     return self.name 

class Level(models.Model): 
    LEVEL_CHOICES = (
     ('unknown','Unknown'), 
     ('standard','Standard level'), 
     ('professional','Professional level'), 
     ('native','Native speaker level'), 
    ) 
    name = models.CharField(max_length=40,choices=LEVEL_CHOICES, blank=False, null=False) 
    price_multiplier = models.FloatField() 

def __str__(self): 
    return self.get_name_display() 

class UserProfileLanguage(models.Model): 
    userprofile = models.ForeignKey(UserProfile) 
    language = models.ForeignKey(Language) 
    level = models.ForeignKey(Level) 

    class Meta: 
     unique_together = (('userprofile', 'language'),) 

Bu yüzden bir User bir dil A bilir olmadığını bilmek istiyorum mesela, ben bunu yapmak zorunda:

print A in user.userprofile.userprofilelanguage_set.all() 

orada daha mı basit yol? Ben mesela print çalıştığınızda user.userprofile.languages o SolutionsForLanguagesApp.Language.None

cevap

1

o yavaş sorgu kümesi, her şeyi döngü olabilir, çünkü bir şeyler aramak için in kullanmamalısınız döndürür. exists():

kullanmanız gerekir.
İlgili konular