gpt4 book ai didi

python - 评论未添加到数据库中

转载 作者:行者123 更新时间:2023-12-04 07:43:12 25 4
gpt4 key购买 nike

我正在使用 Django 开发一个电影网站,我正在尝试添加用户评论。只有注册用户才可以发表评论。到目前为止,我有以下几点:
模型.py:

class Comment(models.Model):
movie = models.ForeignKey(Movie, related_name = "comments", on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete = models.CASCADE)
content = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)

def __str__(self):
return '%s - %s' % (self.movie.title, self.name)
表格.py
class CommentForm(forms.ModelForm):
content = forms.CharField(label ="", widget = forms.Textarea(
attrs ={
'class':'form-control',
'placeholder':'Comment here!',
'rows':5,
'cols':50
}))
class Meta:
model = Comment
fields =['content']
View .py
class MovieDetailsView(generic.DetailView):
model = Movie
template_name = "details.html"

def comment(request, id):
movie= Movie.objects.get(id)
if request.method == 'POST':
cf = CommentForm(request.POST or None)
if cf.is_valid():
content = request.POST.get('content')
comment = Comment.objects.create(movie = movie, user = request.user, content = content)
comment.save()
return redirect(movie.get_absolute_url())
else:
cf = CommentForm()

context ={
'comment_form':cf,
}
return render(request, 'details.html', context)
详情.html
<form method="POST" action="#" class="form">
{% csrf_token %}
{{comment_form.as_p}}
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
<textarea id="text" name="text" class="form__textarea" placeholder="Add comment"></textarea>
<button type="button" class="form__btn">Send</button>
</form>
MovieDetailsView 显示电影的详细信息页面并有一个评论部分。但是,当我提交评论时,它只显示一个白页和此链接: http://127.0.0.1:8000/details/1# .该评论未保存在数据库中,我似乎无法找到问题所在。我也在关注 this 中的例子关联。
提前致谢!

最佳答案

您可以组合 FormMixinDetailView - Using FormMixin with DetailView .

from django.urls import reverse
from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin
from django.http import HttpResponseForbidden


class MovieDetailsView(FormMixin, DetailView):
model = Movie
template_name = "details.html"
form_class = CommentForm

def get_success_url(self):
return reverse('movie_detail', kwargs={'pk': self.object.pk})
# or
# return self.object.get_absolute_url()

def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden()
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)

def form_valid(self, form):
form.instance.user = self.request.user
form.instance.movie = self.object
form.save()
return super().form_valid(form)
post()方法,我们首先检查用户是否登录:
if not request.user.is_authenticated:
return HttpResponseForbidden()

在模板中:
<form method="POST" class="form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary btn-lg">Submit</button>
</form>
您可以删除 action属性,表单将被提交到同一页面。

关于python - 评论未添加到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67341135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com