django - 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'
有人熟悉这个吗?
解决方案
你的模型没有任何意义。Profile 和 User 之间存在多对多关系。顾名思义,这意味着每个用户可以拥有多个配置文件,并且每个配置文件都可以与多个用户相关联。
这肯定不是您想要的:您需要将单个用户与单个配置文件关联,并且该配置文件仅属于该用户。所以你应该使用一对一的字段。
user = models.OneToOneField(User, related_name='profile')
注意另外两个变化: max_length 用于字符串,而不是关系;更重要的是,因为您想通过user.profile
您必须将 related_name 设置为来访问配置文件profile
。
推荐阅读
- android - 我怎样才能像图片上一样创建用户界面
- javascript - 如何处理firestore中为空的数据?
- c - 在 cmd 上打印到 stderr 无法打印非 ASCII UTF-8 文本的第一个字符
- python - 如何存储来自 Web 请求响应的特定数据?
- android - 使用 BottomSheetDialogFragment 删除底部表中的暗淡背景
- graphql - 链接资产随机消失
- html - 有没有办法隐藏检查元素的评论?
- sql - 使用 SQL Server 2016 解析 XML
- javascript - 如何在类外的另一个函数中使用类的方法?
- pytorch - 如何在 Pytorch 中训练 LSTM?