Django'User'对象没有属性'profile'

时间:2019-09-02 07:22:47

标签: django django-views

有人可以帮助我吗?我一直在这里四处询问有关问题,但找不到答案。

我得到'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'

有人熟悉吗?

2 个答案:

答案 0 :(得分:3)

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

当然不是您想要的:您需要将一个用户与一个个人资料相关联,并且该个人资料仅属于该用户。因此,您应该使用一对一字段。

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

请注意另外两个更改:max_length用于字符串,而不用于关系;更重要的是,由于您要通过user.profile访问个人资料,因此必须将related_name设置为profile

答案 1 :(得分:0)

确保您的应用在settings.py INSTALLED_APPS中可用