私のモデルでは、次のものがあります
--- models.py ---
class A(models.Model):
my_Bs = models.ManyToManyField('B', through='AlinksB')
...
class B(models.Model):
...
class AlinksB(models.Model):
my_A = models.ForeignKey(A)
my_B = models.models.ForeignKey(B)
order = models.IntegerField()
対応する管理者も同様です (管理者ビューには B インスタンスをリンクするためのインラインがあり、このインラインのフォームセットとフォームをカスタマイズするために必要なものを用意しました):
--- admin.py ---
class AlinksBInlineForm(forms.ModelForm):
class Meta:
model = AlinksB
class AlinksBInlineFormset(forms.models.BaseInlineFormSet): # there also is a BaseModelFormset
form = AlinksBInlineForm
class AlinksBInline(admin.TabularInline):
formset = AlinksBInlineFormset
model = AlinksB
class AAdmin(admin.ModelAdmin):
form = AForm
inlines = (AlinksBInline,)
...
class BAdmin(admin.ModelAdmin):
...
フォームのバリデーションをカスタマイズするには、難しいことは何もありません。フォーム オブジェクトの「クリーン」メソッドをオーバーライドするだけです。フォームセットに多くの異なるフォームが必要な場合は、フォームセットの「 init」メソッドで手動で変更するだけでよいと思います。しかし、フォームセットをクリーンアップするときにすべてのフォームをプログラムで検証するのはどうでしょうか。
私の場合:すべての注文(インライン行を除外して削除する)が空の場合、自動インクリメントで「注文」フィールド(A管理ビューのインライン)を自動的に設定する方法?!