Ich bin dran herauszufinden, wie man mit through-models
in Django
arbeiten, um Attribute bequemer zu bekommen. Ich weiß, wie man einige Attribute mit dieser models
bekommen kann, aber es ist nicht intuitiv und es ist schwer sich daran zu erinnern, wie man sie bekommt.Wie kann man in Django auf Attribute zugreifen, die ein Durchgangsmodell verwenden?
Zum Beispiel in meinem Fall:
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'),)
So zum Beispiel, wenn ich, ob ein User
Sprache A
weiß wissen wollen, ich habe dies zu tun:
print A in user.userprofile.userprofilelanguage_set.all()
einen gibt es einfacher Weg? Als ich nach print
zum Beispiel versuchen user.userprofile.languages
gibt es SolutionsForLanguagesApp.Language.None