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?
:
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