Shi*_*dla 11 django post request django-class-based-views
我正在使用django更新视图来model/records编辑下面的内容
class EditProductView(LoginRequiredMixin, UpdateView):
model = Product
def get_template_names(self):
return ['website/product/edit_product.html']
def get_success_url(self):
return reverse('product_details', args=[self.kwargs['pk']])
def get_context_data(self, **kwargs):
publisher = Publisher.objects.get(product__id=self.kwargs['pk'])
context = super(EditProductView, self).get_context_data(**kwargs)
context.update(
{
'publisher':publisher,
}
)
return context
edit_product = EditProductView.as_view()
Run Code Online (Sandbox Code Playgroud)
所以我想要/想要做的就是POST在提交表单之前改变(添加一些数据,根据网站功能编辑已提交的数据)数据,
所以我知道UpdateView有一些方法def def post(self, request, *args, **kwargs):,但我不确切知道如何使用它
假设下面是我得到的request.POST数据
<QueryDict: {u'product_name': [u'Biscuit'], u'product_price': [u'1000'], u'product_tag': [u'']}>
Run Code Online (Sandbox Code Playgroud)
所以现在我想改变上面的内容QueryDict,如果值为product_tag空,我需要指定一些默认值并提交最新的querdict
我也知道Querydict是可变的,但是因为我确实需要编辑POST数据,之前submitting/saving to database,我需要将该querydict作为dict,然后编辑它,然后转换回querdict
毕竟我的问题是什么
POST数据UpdateViewpost方法是否有效?Krz*_*arz 11
在QueryDict您创建它之后是可变的.copy().查看文档.
更新示例:
class SomeUpdateView(UpdateView):
def post(self, request, **kwargs):
request.POST = request.POST.copy()
request.POST['some_key'] = 'some_value'
return super(SomeUpdateView, self).post(request, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这是关于该主题的更广泛的讨论.
此外,这不应该在ModelForm子类中完成吗?您当然知道可以将自定义表单设置为form_classin UpdateView.这样的逻辑通常需要单元测试,并且单元测试逻辑更容易.