如何从表单(ProductCreateForm
)中获取数据?
如果我写form = self.get_form()
,那么我只会得到一个表单模板,其中选择了一些数据,而没有选择(特别是选择)。
如果我写form = ProductCreateForm(request.POST)
,则会收到一条错误消息,指出未找到该请求。也许是由于这样的事实:我在get_context_data()中设置了请求,并在__init__
的{{1}}方法中使用了它们。
我以forms.py
中的clean方法处理数据。
我有以下视图
forms.py
表格
class ProductsCreate(CreateView):
model = Product
form_class = ProductCreateForm
http_method_names = ['get', 'post']
def get_initial(self):
initial = super(ProductsCreate, self).get_initial()
initial['request'] = self.request
return initial
def get_context_data(self, *args, **kwargs):
ctx=super(ProductsCreate, self).get_context_data(*args, **kwargs)
ctx['special_form'] = SpeciallyPriceForm()
return ctx
def get(self, request, *args, **kwargs):
self.object = None
if kwargs.get('slug'):
category = Category.objects.filter(slug=kwargs.get('slug')).first()
self.initial.update({'category': category})
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
self.object = None
form = ProductCreateForm(request.POST) #What here?
special_form = SpeciallyPriceForm(self.request.POST)
if form.is_valid() and special_form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
答案 0 :(得分:0)
1。以这种方式尝试通过请求
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
initial = super(ProductsCreate, self).get_initial()
initial['request'] = self.request
return initial
然后输入forms.py
def __init__(self):
kwargs.pop('initial').get('request')
您确定这一切正常吗?在您的表单中的 init 上,我没有看到super()调用,因此您应该收到错误消息?
您仅对类别字段有问题吗?您可以正确获取其余数据吗?
您将kwargs.pop('request')传递到哪里?
您可以打印并检查self.request.POST中的内容