見た目よりも複雑ですが、djangoフォームセットの検証がどのように機能するかについての情報を探しています。値を持つフォームセットがあります。これらの値の一部は、javascript によってそこに挿入できます (データベースにまだ存在しないことを意味します)。
class RequireOneFormSet(BaseInlineFormSet):
def clean(self):
if any(self.errors):
return
form_count = len([f for f in self.forms if f.cleaned_data])
if form_count < 1:
raise ValidationError(_('At least one %(object)s is required.') %
{'object':
_(self.model._meta.object_name.lower())})
class VariantInline(admin.StackedInline):
model = Variant
extra = 1
formset = RequireOneFormSet
class ProductAdmin(admin.ModelAdmin):
class Meta:
model = Product
class Media:
js = (os.path.join(STATIC_URL, 'js', 'admin_utils.js'), )
exclude = ('slug',)
filter_horizontal = ('category',)
inlines = [ImageInline, DetailInline, VariantInline]
manufacturer = ModelChoiceField(Manufacturer.objects.all())
list_filter = ('name', 'manufacturer', 'category')
list_display = ('name', 'manufacturer')
search_fields = ('name',)
save_as = True
次に、これらのエントリに基づいて、フォームセットの検証中にオブジェクトを作成したいと思います。「保存」ボタンをクリックすると、Django は DB にそのようなオブジェクトがないと文句を言います。
モデルの clean メソッド、ModelAdmin の clean、formset の save_formset をオーバーライドしようとしましたが、javascript によって作成されたこれらの値がプロセスの早い段階で除外されるため、うまくいきませんでした。どのメソッドがそれを処理するかについての情報を探しています。オーバーライドできますか?
編集: いくつかのコードを追加しました。使用されるビューは Django の汎用ビューです。