Django说模型没有ForeignKey到另一个模型,但确实如此

时间:2016-04-14 09:30:04

标签: python django django-models

你能帮我弄清楚为什么Django会引发这个错误吗?

  

SolutionsForLanguagesApp.LanguageLevel:(fields.E336)模型是   用作中间模型   'SolutionsForLanguagesApp.UserProfile.languages',但它没有   拥有'UserProfile'或'Language'的外键。

我很困惑,因为正如您所看到的,Language中已有LanguageLevel的外键:

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

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

你知道该怎么办吗?

编辑 - 添加了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 个答案:

答案 0 :(得分:0)

您的LanguageLevel模型遗失了ForeignKey UserProfile

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

此外,我不确定unique_together约束是否符合您的要求 - 这意味着只有一个用户可以拥有任何一种语言/级别的组合。更可能的约束是('userprofile', 'language'),因此语言只能映射到用户一次。