django使用modelform限制“创建/更新”视图中的字段

时间:2016-05-26 19:01:11

标签: django class views modelform

我有一个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提交。

0 个答案:

没有答案