Django:ManyToMany关系错误(对象没有属性)

时间:2017-01-12 10:43:13

标签: python django django-models many-to-many

我正在尝试在Django中定义一些ManyToMany关系,但是当我尝试创建相关对象时出错。

我的models.py:

class PerfumeBrand(models.Model):
    class Meta:
        verbose_name = "Marque de parfum"
        verbose_name_plural = "Marques de parfum"

    name = models.CharField(max_length=32)

    def __str__(self):
        return self.person.first_name + ' ' +  self.person.last_name.upper() + ': ' + self.name


class Person(models.Model):
    class Meta:
        verbose_name = "Personne"
        verbose_name_plural = "Personnes"

    first_name = models.CharField(max_length=32, )
    last_name = models.CharField(max_length=32)
    email = models.EmailField(unique=True)
    # Here is the ManyToMany relation
    perfume_brands = models.ManyToManyField(PerfumeBrand)

问题是当我尝试在我的数据库中保存PerfumeBrand对象时,我收到此错误:

  

/ admin / visualize / perfumebrand / add /

中的AttributeError      

' PerfumeBrand'对象没有属性' person'

我试图在代码和管理面板中保存,发生同样的错误。

由于这是我第一次在Django项目中需要ManyToMany关系,我有点困惑,而且我没有找到解决问题的方法。

你有什么想法吗?

2 个答案:

答案 0 :(得分:2)

PerfumeBrand对象上,您声明了此

def __str__(self):
    return self.person.first_name + ' ' + self.person.last_name.upper() + ': ' + self.name

person不是PerfumeBrand的属性。该函数应该在Person类之下(之前有一些更改),你应该使用PerfumeBrand类中的以下内容:

def __str__(self):
    return self.name

答案 1 :(得分:1)

班级PerfumeBrand从不定义变量person,只定义name