製品モデルと価格モデルがあります。価格モデルには、製品モデルへの FK があります。複数の価格が存在する場合があります (販売されたユニットの数量によって異なります)。django 1.2.5 より前のhttp://yergler.net/blog/2009/09/27/nested-formsets-with-django/は問題を解決します。しかし、詳細なhttp://www.mail-archive.com/django-users@googlegroups.com/msg124195.htmlとして、これはもはや機能しません。
目的の結果を終了します: データを編集および追加するには、次のフォームを使用します。
製品 1 - 価格 1、数量 - 価格 2、数量 製品 2 - 価格 1、数量 製品 3 - 価格 1、数量 - 価格 2、数量 - 価格 3、数量
明確にするために再現:
Nathan の元のコードでは、最下位レベルのフォームセットは次のように作成されます。
TenantFormset(data=self.data,
instance=instance,
prefix='TENANTS_%s' % pk_value)
ここで、instance は Building のインスタンスであり、テナントの「親」またはコンテナーであり、self はのインスタンスです。
class BaseBuildingFormset(BaseInlineFormSet)
これは次のようにインスタンス化されます:
BuildingFormset = inlineformset_factory(models.Block,
models.Building,
formset=BaseBuildingFormset,
extra=1)
これを回避するために、self.data を渡すのをやめました。これにより、レンダリングされてビューに POST された後でも、最下層のフォームは常に is_bound = False になります。その結果、検証は常に失敗し、フォームが表すオブジェクトは更新できません。Nathan のブログ投稿のコードを使用して動作を再現したので、フォームセットをネストするこのアプローチはもはや有効ではないか、1.3 で動作するようにコードを微調整する必要があるようです。
Django 1.2.5 までは、Nathan のコードは問題なく動作します。ただし、1.3 では、self.data が TenantFormset に渡されると、空であることが判明し、ManagementForm 情報が提供されていないため、ValidationError が発生します。
これは #11418、AFAICT の意図した結果です。
これをどのように機能させるかについて、他に考えがある人はいますか?
乾杯、
(詳細なコード例がなくて申し訳ありません。ネイサンの投稿は私のコードよりもはるかに明確なので、それを確認することをお勧めします。)
一般的な注意:これを行う方法については、多くの混乱があるようです。ここの回答で示されています http://www.reddit.com/r/django/comments/hwyto/is_there_a_way_to_do_nested_formsets_in_django/