首页 > 解决方案 > Django“用户”对象没有属性“配置文件”

问题描述

有人能帮我吗?我一直在四处寻找关于 SO 的问题,但无法得到答案。

我越来越'User' object has no attribute 'profile'

这是我的用户模型

class Profile(models.Model):

    NARRATESTATUS = (
        ('PAS', 'Passed'),
        ('REV', 'For_Review'),
        ('ACC', 'Narration_Accepted'),
    )

    TRANSLATESTATUS = (
        ('PSD', 'Passed'),
        ('RVW', 'For_Review'),
        ('ACP', 'Translation_Accepted'),
    )

    user = models.ManyToManyField(User, max_length=50, related_name='userprofile')
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    narrate = models.TextField(max_length=9999, default='Enter Narration')
    review_narration = models.CharField(max_length=50, choices=NARRATESTATUS, default='Reviewing Narration')
    translate = models.TextField(max_length=9999, default='Enter Translation')
    review_translation = models.CharField(max_length=50, choices=TRANSLATESTATUS, default='Reviewing Translation')

    def __str__(self):
        return self.user

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
           output_size = (300, 300)
           img.thumbnail(output_size)
           img.save(self.image.path)

我不知道为什么它在抛出'User' object has no attribute 'profile'

有人熟悉这个吗?

标签: djangodjango-views

解决方案


你的模型没有任何意义。Profile 和 User 之间存在多对多关系。顾名思义,这意味着每个用户可以拥有多个配置文件,并且每个配置文件都可以与多个用户相关联。

这肯定不是您想要的:您需要将单个用户与单个配置文件关联,并且该配置文件仅属于该用户。所以你应该使用一对一的字段。

user = models.OneToOneField(User, related_name='profile')

注意另外两个变化: max_length 用于字符串,而不是关系;更重要的是,因为您想通过user.profile您必须将 related_name 设置为来访问配置文件profile


推荐阅读