python - 如何在 Django 中使用 CBV 中的表单集?
问题描述
我有一个表格ProductCreateForm
。有必要在其中插入表格SpeciallyPriceForm
。
我对ProductCreateForm
. 但我也不知道如何处理SpeciallyPriceForm
它。
class ProductsCreate(CreateView):
model = Product
form_class = ProductCreateForm
http_method_names = ['get', 'post']
def get_form_kwargs(self):
print('form')
kwargs = super(ProductsCreate, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs
def get(self, request, *args, **kwargs):
self.object = None
...
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
self.object = None
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
product = form.save(commit=False)
product.user = self.request.user
product.save()
if self.request.is_ajax():
return JsonResponse({'success': True, 'location': location})
else:
return redirect(location)
def form_invalid(self, form):
....
更新。
class ProductsCreate(CreateView):
model = Product
form_class = ProductCreateForm
# template_name = 'products/product_form.html'
http_method_names = ['get', 'post']
def get_form_kwargs(self):
kwargs = super(ProductsCreate, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs
def get_context_data(self, *args, **kwargs):
print('ok')
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 = self.get_form()
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)
def form_valid(self, form):
product = form.save(commit=False)
我需要模板作为
<form ... >
{{ form }} /*product_form
{{ formset }} /* specially_price_form
</form>
更新2
楷模
class Product(models.Model):
category = models.ForeignKey(
Category, related_name='product',
verbose_name=_('category'), on_delete=models.SET_NULL, null=True,
)
形式
self.fields['category'] = ModelMultipleChoiceField(queryset=provider.category.all())
def clean(self):
cleaned_data = super(ProductCreateForm, self).clean()
cd_category = cleaned_data.get('category')
意见
form = self.get_form() #Error
解决方案
我相信 aformset
真的是用不同的实例多次显示相同的形式。你在这里想要的是 2 种形式。添加get_context data
def get_context_data(self, *args, **kwargs):
ctx=super().get_context_data(*args, **kwargs)
ctx['special_form'] = SpeciallyPriceForm()
return ctx
def form_valid(self, form):
special_form = SpeciallyPriceForm(self.request.POST)
if special_form.is_valid():
...
else: error code and return to screen
推荐阅读
- python - 将全连接层转换为 conv2d 并预测输出?
- ode - 将 Scilab 的 ode 输出保存到表中
- java - 使用 ThreadLocal 类在 AndroidDriver 中运行并行执行时“无法创建新会话”
- php - 替换“优惠券代码申请成功”。WooCommerce 中的消息
- jetty - Jetty 8 阻塞慢客户端的 IO
- integration - 使用 BullHorn API 连接 DellBoomi
- asp.net-core - 为什么我只能在控制器 Blazor / aspnet core 3 上调用一项操作?
- python - For 循环列表中列表的索引 - 索引超出范围
- flutter - Flutter Bloc 在收到事件之前发送状态
- c - 在 for 循环崩溃程序中打印二维数组