python - 如何显示表单实例?
问题描述
如何传递带有实际填写的配置文件信息的表单(如函数视图中的 ProfileUpdateForm(instance=x))。我是这样做的,不知道如何将实际的配置文件实例传递给表单。UpdateView 之类的东西,但在我的 DetailView 类中
class ProfileDetailView(FormMixin, DetailView):
model = Profile
context_object_name = 'profile'
template_name = 'profiles/myprofile.html'
form_class = ProfileUpdateForm
def post(self, request, *args, **kwargs):
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.save()
return super().form_valid(form)
def get_success_url(self):
return reverse_lazy('profiles:profile', kwargs={'pk': self.get_object().pk})
解决方案
如果你想更新一个模型的实例,你应该使用UpdateView
[Django docs]:
from django.urls import reverse
from django.views.generic.edit import UpdateView
class ProfileDetailView(UpdateView):
model = Profile
context_object_name = 'profile'
template_name = 'profiles/myprofile.html'
form_class = ProfileUpdateForm
def get_success_url(self):
# Use `reverse` instead of `reverse_lazy`. You will get an error otherwise!
return reverse('profiles:profile', kwargs={'pk': self.get_object().pk})
此外,如果需要将关键字参数传递给表单(在这里instance
,尽管我建议坚持使用UpdateView
),您应该覆盖get_form_kwargs
:
class MyView(SomeGenericView):
...
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['some_kwarg'] = 'Some value'
# Your use case implies below line
# kwargs['instance'] = self.get_object()
return kwargs
推荐阅读
- clickhouse - 如何在 Clickhouse 中使用数组连接
- python - Blender - 尝试安装 Sverchok 插件 Scipy 包,但 PIP 已过时并且 ~WinError 5 Access denied
- python - mac:尝试使用 pip 安装 mssql-cli 失败并出现语法错误
- conv-neural-network - 针对特定全连接 nn 或 CNN 的 ASIC 设计
- matplotlib - 如何使用 matplotlib 为一系列 Seaborn 热图制作动画并导出为 mp4 文件?
- java - 如何解释输出?Java ,Collator-CollationKey-toByteArray()
- mysql - 如何在 SQL 中找到前一个(倒数第二个)值?
- swift - Firestore 的 Swift MVC 模型(学习 MVC 模型)
- optimization - 如何克服粒子群优化(PSO)中的收敛问题?
- r - 将差异分配给Julia中的向量时出错