python - 谁能帮我在 django 中创建更新视图?
问题描述
视图.py
class DreamHeroView(CreateView):
template_name = 'dream_hero.html'
model = Character
form_class = DreamHeroForm
def get(self, *args, **kwargs):
form = DreamHeroForm()
return render(self.request, 'dream_hero.html', {'form': form})
def post(self, *args, **kwargs):
form = DreamHeroForm(self.request.POST, self.request.FILES or None)
if form.is_valid():
title = form.cleaned_data['title']
description = form.cleaned_data['description']
strenght = form.cleaned_data['strenght']
power = form.cleaned_data['power']
weapon = form.cleaned_data['weapon']
hero_image = form.cleaned_data['hero_image']
slug = form.cleaned_data['slug']
post = Character(
title=title,
description=description,
strenght=strenght,
power=power,
weapon=weapon,
hero_image=hero_image,
slug=slug,
user=self.request.user,
)
post.save()
return redirect('character-post')
return render(self.request, 'dream_hero.html')
视图.py
class StoryDetailView(FormMixin, DetailView):
model = Character
template_name = 'story.html'
context_object_name = 'comment_set'
form_class = CharCommentForm
def get_context_data(self, **kwargs):
context = super(StoryDetailView, self).get_context_data(**kwargs)
context['commenting'] = self.object.charactercomment_set.all()
context['pro_pic'] = get_object_or_404(Author, user=self.request.user)
context['charform'] = CharCommentForm()
return context
def get_success_url(self):
return reverse('story-post', kwargs={
'slug': self.object.slug
})
def post(self, request, *args, **kwargs):
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.post = self.get_object()
form.save()
return super().form_valid(form)
表格.py
class DreamHeroForm(forms.Form):
title = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Name of your hero'
}))
description = forms.CharField(widget=forms.Textarea(attrs={
'class': 'form-control',
'placeholder': 'Story of your Hero'
}))
slug = forms.SlugField()
hero_image = forms.ImageField()
strenght = forms.IntegerField()
power = forms.IntegerField()
weapon = forms.IntegerField()
解决方案
Django 有一个UpdateView
内置的。
from django.views.generic.edit import UpdateView
class MyUpdateView(UpdateView):
model = MyModel
fields = ["field_1", "field_2"] # or use form_class = MyForm
template_name = "myapp/mymodel_update.html"
您需要在更新视图的 url 中有一个 PK,以便它可以正确查找模型实例(您可以通过lookup_url_kwarg
在类 IIRC 中设置来覆盖它)
文档: https ://docs.djangoproject.com/en/3.0/ref/class-based-views/generic-editing/#updateview
推荐阅读
- scala - 如何对 Scala 中的对象列表执行二进制搜索
- php - “产品已删除”和“购物车已更新”的 WooCommerce 通知消息挂钩
- terraform - 如何在 Terraform 配置中使用共享 VPC GCP?
- python - Python 代码不等待 Tweepy wait_on_rate_limit
- node.js - 如何从braintree结果中获取orderId
- haskell - 如何将文件加载到 ghci
- mysql - 外键真的会降低性能并且最好不要使用它吗?
- node.js - VSCode 从不打开正确的文件夹,而只是 System32
- python - Python pandas数据框将元素添加到前一行值并创建一个新列
- command-line-interface - 使用 Python Click 扩展 BASH 补全