1

私はこのモデルを持っています:

class option(models.Model):
    warval = models.ForeignKey(war)
    caption = models.CharField(max_length=20)
    text = models.TextField(blank=True,null=True)
    url = models.URLField(blank=True,null=True)
    user = models.ForeignKey(User)

また、次の形式もあります。

class text_option(ModelForm):
    class Meta:
        model = option
        exclude = ('url','warval','user')

class url_option(ModelForm):
    class Meta:
        model = option
        exclude = ('text','warval','user')

「text_option」フォームのフォームセットを作成するとします。私が望むのは、このフォームセット内のすべてのフォームを「war」:w と「user」:u でインスタンス化することです。他のオプションはありますか?

4

1 に答える 1

1

あなたが望むものは可能です。自動的にそれを行うクラスベースのビューがあるかどうかは今のところ覚えていませんが(私はそうは思いませんが)、手間をかけずに手動で行うことができます。

ビューポストメソッドでは、フォームセット内のフォームをインスタンス化して(これを見てください)、それが有効であることを確認した後、フォームセットのフォームを反復処理し、必要に応じてユーザーとwarvalを設定できます。

もう1つのオプションは、userとwarvalを初期値として設定することです。これにより、そのフォームセット内のすべてのフォームに、必要なuserとwarvalが含まれるようになります。

これらすべてを行う方法の例が必要な場合は、役立つようにいくつか追加することもできますが、djangoのドキュメントが最善の方法だと思います。

編集:モデルのcleanメソッドと 同様に、formsetのcleanメソッドにフォームセット(またはフォームセット内のフォーム)の「デフォルト」値を追加できます。この手順に従って、独自のクリーンメソッドを含めてから、次のようにフォームセット内に各フォームをインスタンス化することができます(注:これはコンピューターで試していませんが、必要に応じて行う方法です)。

for form in formset:
    form.instance.user = user
    form.instance.warval = warval

それが役に立てば幸い!

于 2012-07-23T13:50:41.163 に答える