【问题标题】:Django : ManyToMany relation error ( object has no attribute)Django:ManyToMany 关系错误(对象没有属性)
【发布时间】:2017-01-12 10:43:12
【问题描述】:

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

我的模型.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 项目中需要多对多关系,所以我有点困惑,我没有找到任何解决问题的方法。

你有什么想法吗?

【问题讨论】:

  • 确实,PerfumeBrand 没有属性person。那么为什么在__unicode__ 方法中使用self.person 呢?

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


【解决方案1】:

PerfumeBrand 类从不定义变量person,只定义name

【讨论】:

    【解决方案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
    

    【讨论】:

    • 天哪,我翻转了我的关系,完全忘记删除 str 中的名称。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2014-05-14
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2019-09-27
    相关资源
    最近更新 更多