我有一个django模型表单。该模型在模型 .clean()
方法中具有一些业务逻辑。
我已经定义了一个ModelForm
,比如说:
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = ('product', 'attachment', 'comments',) # more fields..
问题:我想在更新模式下限制某些字段的编辑,同时仍然重用表单 - 因为它具有创建和更新应该相同的逻辑。在这种情况下,仅应允许更新comments
。 (其余应为禁用字段或根本不显示)。
在模板中:
我有一个简单的页面,显示用户的所有订单。在同一页面中,他可以添加新订单,或更新现有订单
update和create都使用相同的表单,我有一些JS代码可以禁用更新中的字段,还可以使用选定的订单<input type="hidden">
设置id
字段。 (这是一些乏味的JS工作,顺便说一下。)
在我看来:
class CreateOrder(CreateView):
form_class = OrderForm
def form_valid(self, form):
order = form.save(commit=False)
order.user = self.request.user
order_id = self.request.POST.get('order_id')
# Here I'm stuck, if I have an order_id, it should be an update,
# so I should use form instance attribute,
# but how do I restrict my fields in case of update?
我有点困惑如何在视图中处理这个问题,有太多类视图似乎适合 - CreateView, UpdateView, FormView
。我不知道选哪个。
我也很困惑我是否应该以某种方式对表单进行子类化,从而创建另一种表单进行更新。我确实想要应用相同的形式逻辑
如果这很重要,我的表格将通过ajax提交。