0
私はフォームセットを使用するオーダーフォームを使用しています。これはユーザーに、より多くの製品とその数量を動的に追加させたいからです。 ユーザーが注文の名前を入力し、それが空でないことが検証されます。 フォームセット自体を検証するにはどうすればよいですか?製品/数量が空でないことを確認しCBVのformsetバリデーション
views.py
class OrderCreateView(CreateView):
model = Order
template_name = "orderform.html"
fields = ['name', ]
def get_context_data(self, **kwargs):
data = super(OrderCreateView, self).get_context_data(**kwargs)
if self.request.POST:
data['productmetas'] = InlineOrderFormSet(self.request.POST)
return data
def form_valid(self, form):
context = self.get_context_data()
productmetas = context['productmetas']
self.object = form.save(commit=False)
self.object.save()
if productmetas.is_valid():
productmetas.instance = self.object
productmetas.save()
return super(OrderCreateView, self).form_valid(form)
models.py作業に興味がある人のために
class ProductMeta(models.Model):
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
quantity = models.FloatField()
forms.py
InlineOrderFormSet = inlineformset_factory(Order, ProductMeta,
form=OrderAutoCompleteForm,
extra=1)
これを確認してくださいhttps://gist.github.com/neara/6209563 – neverwalkaloner
ありがとうございます、それはうまくいきます。私が変更しなければならなかったのは 'commit_on_success'を' atomic'に置き換えることでした。 'commit_on_success'はもはや' transaction'の一部ではありません(django 1.11使用時)。私はformsetにdjango-autocomplete-lightを使用しており、htmlに検証エラーを表示させるためには無効にする必要がありました。私はそれをdjango-autocomplete-lightと一緒にすることができますか? – ChenR