2

Djangoで「複製」ModelFormを作成する簡単な方法があるかどうか疑問に思っています-つまり、既存のモデルインスタンスのコンテンツが事前に入力されているフォーム(一意のフィールドなどの特定のフィールドを除く)ですが、保存時の新しいインスタンス。

「編集」フォームのようにデータが事前に入力されるように ModelForm にインスタンスを提供し、保存する前にインスタンスを None に設定するという方針に沿って考えていましたが、これにより「'NoneType' オブジェクトには属性 'pk がありません。 '" フォームで .save() を呼び出すとエラーが発生します。フォームを構築するときにインスタンスを提供する行為は、最後にそこにあるという依存関係を作成するようです。

この問題の解決策を見つけるのに苦労しましたが、「重複した」フォームがあまりにもユニークであるとは想像できないので、単純なものが欠けているのではないでしょうか?

どんな助けでも大歓迎です。

4

2 に答える 2

1

必要なのは、フォームのフィールドの初期値を入力する方法だと思います。これを実現する最良の方法は、既存のインスタンスから初期値(フィールド名でキー設定)のディクショナリを作成し、これをフォームに提供することです。

このようなもの:

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(**conditions)
initial = dict()
for field in ('state', 'zipcode'): # Assuming these are the fields you want to pre-fill
    initial[field] = getattr(address, field)

form = AddressForm(initial = initial)
于 2010-08-31T05:48:57.710 に答える
1
class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

# Inside view:
address = Address.object.get(pk=<your-id>)
address.pk = None # that's the trick, after form save new object will be created
form = AddressForm(instance=address)
于 2010-08-31T07:32:08.040 に答える