【发布时间】:2020-08-18 21:55:50
【问题描述】:
我刚开始学习 Django 并试图创建一个简单的博客网站,但由于某种原因,我无法通过 UpdateView 更新我的博客。每次我从更新博客页面点击提交按钮时,它都会让我回到详细视图页面而不做任何更改。除了 UpdateView 之外,其余部分似乎都可以正常工作,例如 CreateView、DeleteView、ListView。
这里是views.py的代码-
class PostDetailView(DetailView):
model = Post
template_name = 'posts/post.html'
context_object_name = 'obj'
form = CommentForm
def get_object(self):
obj = super().get_object()
if self.request.user.is_authenticated:
PostView.objects.get_or_create(user=self.request.user,post=obj)
return obj
def get_context_data(self, *args, **kwargs):
CatCount = Category_Count()
context = super().get_context_data(*args, **kwargs)
context['latest'] = Post.objects.order_by('-date_added')[0:3]
context['Category_Count'] = CatCount
context['form'] = self.form
return context
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
if form.is_valid():
post = self.get_object()
form.instance.Author = request.user
form.instance.post = post
form.save()
return redirect('post', pk=post.pk)
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
form_class = PostForm
success_url ="/"
def get_object(self):
obj = super().get_object()
if self.request.user.is_authenticated:
PostView.objects.get_or_create(user=self.request.user,post=obj)
return obj
def form_valid(self,form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
post=self.get_object()
if self.request.user == post.Author:
return True
return False
class PostDeleteView( LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Post
success_url='/'
def test_func(self):
post=self.get_object()
if self.request.user == post.Author:
return True
else:
return False
class PostCreateView( LoginRequiredMixin, CreateView):
model = Post
template_name = 'posts/Create.html'
form_class = PostForm
def form_valid(self, form):
form.instance.Author = self.request.user
return super().form_valid(form)
这是表格,我在 UpdateView 中使用 -
class PostForm(forms.ModelForm):
Content = forms.CharField(widget=TinyMCEWidget(
attrs={'required': False, 'cols': 30, 'rows': 10}
))
class Meta:
model = Post
fields= ['title', 'thumbnail', 'Content','Categories', 'featured']
这里是UpdateView的模板-
{% extends 'posts/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class='col-100 offset-1 mb-6 mt-4'> <h3> Update </h3>
</div>
<div class='col-4 offset-2 mb-5 mt-5'>
{{form.media}}
<form method ='POST' action ='.' enctype = 'multipart/form-data'>
{% csrf_token %}
{{form|crispy}}
<button class="btn btn-primary" type="submit">Submit</button>
</form>
</div>
{% endblock content %}
这是项目的链接,以防万一-https://github.com/k-ken-source/DailyBlog-/blob/master/posts/views.py
我不知道我做错了什么,所以任何提示将不胜感激。提前谢谢你。
【问题讨论】:
-
您收到什么错误等。您确定发出 POST 请求,并触发
UpdateView? -
嗨,我很抱歉缩进不好,并已修复。我还添加了 UpdateView 和 @Willem Van Onsem 的模板,如您所见,我正在发出 POST 请求。所以这似乎不是问题。