Django comment form not submitting data [ERROR: function' object has no attribute 'objects]
Django comment form not submitting data [ERROR: function' object has no attribute 'objects]
我在 post 页面上有一个评论表单,用于提交用户评论。我不断收到此错误:
'function' object has no attribute 'objects'
完整追溯:
Traceback (most recent call last):
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\App\views.py", line 208, in AddComment
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
Exception Type: AttributeError at /post/1/comment
Exception Value: 'function' object has no attribute 'objects'
关于 SO 的大多数答案都引用相同的模型和函数名称,但我的情况并非如此。这是我的模型:
class Comment(models.Model):
opinion = models.CharField(max_length=2200, verbose_name='Comment', null=False)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
def __str__(self):
return self.comment
class Meta:
verbose_name_plural = 'Comments'
我的观点
@login_required(login_url='Login')
def AddComment(request, id):
post = Post.objects.filter(id=id)
user = User.objects.get(username=request.user)
if request.method == "POST":
usercomment = request.POST['comment']
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
comment_obj.save()
messages.success(request, '✅ Your Comment Was Created Successfully!')
return redirect('Home')
else:
messages.error(request, "⚠️ Your Comment Wasn't Created!")
return redirect('Home')
还有我的表格:
<form method="POST" action="{% url 'AddComment' post.id %}">
{% csrf_token %}
<div class="d-flex flex-row add-comment-section mt-4 mb-4">
<img class="img-fluid img-responsive rounded-circle mr-2" src="{{ user.profile.profile_image.url }}" width="38">
<textarea class="form-control mr-3" rows="1" name="comment" placeholder="Your Comment" required></textarea>
<button class="btn btn-primary btn-lg" type="submit">Comment</button>
</div>
</form>
最后是我的 URL:
urlpatterns = [
path('post/<int:id>/comment', views.AddComment, name="AddComment"),
]
从您的视图中删除 user = User.objects.get(username=request.user)
,然后更改:
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
对此:
comment_obj = Comment.objects.create(opinion=usercomment, author=request.user, post=post)
因为你不应该在寻找对象的地方传递 id
(在 ForeignKey
中我们需要特定的对象,而不是它的 id
)。
也改一下:
post = Post.objects.filter(id=id)
为此:
post = Post.objects.get(id=id)
因为您需要特定对象,而不是整个 QuerySet
个对象。
所以你问题的最初问题是在这一行
user = User.objects.get(username=request.user)
我什至不知道它是如何通过 Django Orm 的,但它故意做了 return 一些奇怪的事情
你不需要查询用户对象,因为django自己查询用户对象到request.user
。
此外,django.db.models.Model.objects.filter()
总是 returns QuerySet,它不是模型对象,它是一组模型对象。当您通过主键查询并且您确定有一个具有此 id 的实例时使用
django.db.Model.objects.get(pk=pk) # Post.objects.get(id=id) in your case
Note:. this method will reproduce ObjectDoesNotExist exception if there is no object found with this primary key, be aware of that.
我在 post 页面上有一个评论表单,用于提交用户评论。我不断收到此错误:
'function' object has no attribute 'objects'
完整追溯:
Traceback (most recent call last):
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\env\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\Steve Njuguna\Desktop\MoringaCore\Django-Instagram-Clone\App\views.py", line 208, in AddComment
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
Exception Type: AttributeError at /post/1/comment
Exception Value: 'function' object has no attribute 'objects'
关于 SO 的大多数答案都引用相同的模型和函数名称,但我的情况并非如此。这是我的模型:
class Comment(models.Model):
opinion = models.CharField(max_length=2200, verbose_name='Comment', null=False)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
def __str__(self):
return self.comment
class Meta:
verbose_name_plural = 'Comments'
我的观点
@login_required(login_url='Login')
def AddComment(request, id):
post = Post.objects.filter(id=id)
user = User.objects.get(username=request.user)
if request.method == "POST":
usercomment = request.POST['comment']
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
comment_obj.save()
messages.success(request, '✅ Your Comment Was Created Successfully!')
return redirect('Home')
else:
messages.error(request, "⚠️ Your Comment Wasn't Created!")
return redirect('Home')
还有我的表格:
<form method="POST" action="{% url 'AddComment' post.id %}">
{% csrf_token %}
<div class="d-flex flex-row add-comment-section mt-4 mb-4">
<img class="img-fluid img-responsive rounded-circle mr-2" src="{{ user.profile.profile_image.url }}" width="38">
<textarea class="form-control mr-3" rows="1" name="comment" placeholder="Your Comment" required></textarea>
<button class="btn btn-primary btn-lg" type="submit">Comment</button>
</div>
</form>
最后是我的 URL:
urlpatterns = [
path('post/<int:id>/comment', views.AddComment, name="AddComment"),
]
从您的视图中删除 user = User.objects.get(username=request.user)
,然后更改:
comment_obj = Comment.objects.create(opinion = usercomment, author = user.id, post = post.id)
对此:
comment_obj = Comment.objects.create(opinion=usercomment, author=request.user, post=post)
因为你不应该在寻找对象的地方传递 id
(在 ForeignKey
中我们需要特定的对象,而不是它的 id
)。
也改一下:
post = Post.objects.filter(id=id)
为此:
post = Post.objects.get(id=id)
因为您需要特定对象,而不是整个 QuerySet
个对象。
所以你问题的最初问题是在这一行
user = User.objects.get(username=request.user)
我什至不知道它是如何通过 Django Orm 的,但它故意做了 return 一些奇怪的事情
你不需要查询用户对象,因为django自己查询用户对象到request.user
。
此外,django.db.models.Model.objects.filter()
总是 returns QuerySet,它不是模型对象,它是一组模型对象。当您通过主键查询并且您确定有一个具有此 id 的实例时使用
django.db.Model.objects.get(pk=pk) # Post.objects.get(id=id) in your case
Note:. this method will reproduce ObjectDoesNotExist exception if there is no object found with this primary key, be aware of that.