如何解决单击 Django 管理部分中的模型时出现属性错误
我正在使用 Django,但在 /admin/network/post/ 处收到错误 AttributeError 'Post' 对象没有属性 'user'
奇怪的是,当我查看管理部分并单击“帖子”时会发生此错误。我只有用户和帖子的模型。不知道如何解决这个错误,因为到目前为止,在网站的管理部分点击它时我从未遇到过这样的错误:http://127.0.0.1:8000/admin/
我认为问题出在我的模型中,因为创建帖子的视图完全正常。
models.py
class User(AbstractUser):
pass
class Post(models.Model):
text = models.TextField(max_length=500,blank=True,null=True)
username = models.ForeignKey('User',on_delete=models.CASCADE,related_name='author',null=True,blank=True)
timestamp = models.DateTimeField(auto_Now_add=True)
like = models.ManyToManyField(
User,related_name="liked_user")
def __str__(self):
return self.user.username
class Follow(models.Model):
target = models.ForeignKey('User',related_name='followers')
follower = models.ForeignKey('User',related_name='targets')
views.py
def make_post(request):
if request.method == "GET":
form_for_post = {'form': PostForm()}
return render(request,"network/make_post.html",form_for_post)
else:
form = PostForm(request.POST)
if form.is_valid():
text = form.cleaned_data['text']
new_post = Post.objects.create(
text=text,username=request.user,)
return render(request,{
"new_post": new_post,})
解决方法
您将 User
模型中引用 Post
的字段定义为 username
,而不是 user,尽管 user
应该是一个更好的想法。
因此,您应该将 __str__
方法实现为:
class Post(models.Model):
# …
username = models.ForeignKey('User',on_delete=models.CASCADE,related_name='author',null=True,blank=True)
# …
def __str__(self):
return self.username.username
注意:通常使用 settings.AUTH_USER_MODEL
[Django-doc] 来引用用户模型比直接使用 User
model [Django-doc] 更好。有关详细信息,您可以查看 referencing the User
model section of the documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。