2016-04-14 29 views
0

olduğunu söylüyor Django'nun bu hatayı neden artırdığını anlamanıza yardımcı olacak mısınız?Django, modelin başka bir modele ForeignKey içermediğini, ancak gerçekten de

SolutionsForLanguagesApp.LanguageLevel: (fields.E336) modeli 'SolutionsForLanguagesApp.UserProfile.languages' ile termediate modeli olarak kullanılan , ancak 'Kullanıcıprofili' ya da 'bir dış anahtar yok Dil'.

Şaşırdım

gördüğünüz gibi, zaten LanguageLevel yılında Language bir yabancı anahtar vardır, çünkü:

class LanguageLevel(models.Model): 
    language = models.ForeignKey(Language) 
    level = models.ForeignKey(Level) 

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

ne yapmanız gerektiğini biliyor musunuz?

DÜZENLEME - Katma UserProfile:

class UserProfile(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) 

    MARITAL_STATUS_CHOICES = (
     ('single', 'Single'), 
     ('married', 'Married'), 
     ('separated', 'Separated'), 
     ('divorced', 'Divorced'), 
     ('widowed', 'Widowed'), 
    ) 
    marital_status = models.CharField(max_length=40, choices=MARITAL_STATUS_CHOICES, null=True, blank=True) 

    HOW_DO_YOU_KNOW_ABOUT_US_CHOICES = (
     ('coincidence', u'It was coincidence'), 
     ('relative_or_friends', 'From my relatives or friends'), 
    ) 
    how_do_you_know_about_us = models.CharField(max_length=40, choices=HOW_DO_YOU_KNOW_ABOUT_US_CHOICES, null=True, 
               blank=True) 

    # TRANSLATOR ATTRIBUTES 

    is_translator = models.BooleanField(default=False) 

    # language_tuples = models.ManyToManyField(LanguageTuple,blank=True) 
    languages = models.ManyToManyField(Language, through='LanguageLevel') 

    rating = models.IntegerField(default=0) 

    number_of_ratings = models.BigIntegerField(default=0) 

    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) 
+1

Bu modeli, 'UserProfile' modelinde m2m alanı 'language' olarak kullandığınız, ancak modelin kendisinde 'UserProfile' modeline bir yabancı anahtar sağlamadığınız anlamına gelir. UserProfile modelini de ekleyebilir misiniz? – AKS

+0

Artık, UserProfile'ı sorunun alt kısmında bulabilirsiniz. Aslında, her kullanıcının kendi Dillerini ve Seviyelerini kaydetmesini istiyorum. –

+0

2 model arasında bir ara modelin her iki modelde de bir yabancı anahtar olması gerektiğini düşünüyorum. – albar

cevap

0

Sizin LanguageLevel modeli eksik bir ForeignKeyUserProfile için:

class LanguageLevel(models.Model): 
    language = models.ForeignKey(Language) 
    level = models.ForeignKey(Level) 
    # Add Foreign Key to UserProfile 
    userprofile = models.ForeignKey(UserProfile) 

    class Meta: 
     unique_together = (('level', 'language'),) 
Ayrıca

Ben unique_together kısıt istediğini olduğundan emin değilim - it sadece bir kullanıcının dil/seviye bir kombinasyonuna sahip olabileceği anlamına gelir. Daha olası bir kısıtlama ('userprofile', 'language') olur, böylece bir dil yalnızca bir kez bir kullanıcıyla eşlenebilir.

İlgili konular