在通用视图中实现表单的 Django 问题



我正在开发允许用户共享内容(类似Instagram(的应用程序,但我陷入了在DetailView中实现向图片添加评论的功能。 即:将数据输入我的评论表并单击提交按钮后,我收到 404 错误

以下是我的观点:

@method_decorator(login_required, name='dispatch')
class ItemInterest(SingleObjectMixin, FormView):
template_name = 'content/item_detail.html'
form_class = CommentForm
model = Item
def post(self, request, *args, **kwargs):
self.object = self.get_object()
return super().post(request, *args, **kwargs)
def get_success_url(self):
return reverse('item-detail', kwargs={'pk': self.object.pk})

@method_decorator(login_required, name='dispatch')
class ItemDisplayView(DetailView):
model = Item
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['form'] = CommentForm()
return context
@method_decorator(login_required, name='dispatch')
class ItemDetailView(View):
def get(self, request, *args, **kwargs):
view = ItemDisplayView.as_view()
return view(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
view = ItemInterest.as_view()
return view(request, *args, **kwargs)

模型:

class Item(models.Model):
description = models.CharField(max_length=255)
photo = models.ImageField(upload_to='photos')
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)

class Comment(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=255)
body = models.TextField()
create_date = models.DateTimeField(default=timezone.now)
active = models.BooleanField(default=True)

评论表:

class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('author', 'body', 'item',)

和网址:

path('item/<int:pk>/', ItemDetailView.as_view(), name='item-detail'),

item_detail.html:

<div class="container mt-3 mx-auto jumbotron d-flex flex-column align-items-center" >
<div class="user-info d-flex justify-content-center m-2">
<img src="{{ object.author.profile.image.url }}" alt="">
<p class="ml-5"><a href="{% url 'profile' object.author %}">>{{ object.author }}  </a>  <small>{{ object.date_posted }}</small></p>
</div>
<img src="{{ object.photo.url }}" alt="">
<p>{{ object.description }}</p>
{% for comment in object.comments.all %}
<div class="container">
{{ comment.create_date }}
<strong>{{ comment.author }}</strong>
<p>{{ comment.bod y}}</p>
</div>
{% empty %}
<p>no comments yet</p>
{% endfor %}
<form action="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">add comment</button>
</form>
{% if object.author == user %}
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'item-update' object.id %}">update</a>
<a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'item-delete' object.id %}">delete</a>
{% endif %}
</div>

表单有误

<form action="POST">

必须是

<form method="POST">

最新更新