0

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

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')
    def clean_url(self):
            #processing...

ユーザーに好きなだけオプションを作成してもらいたいので、私のオプションは「formset」を使用しています。しかし、フォームセット内のすべてのフォームを「戦争」インスタンスでインスタンス化するにはどうすればよいですか (「戦争」はモデルです)。また、フォームセットで上記のモデルフォームのすべての機能を提供する方法は?

4

1 に答える 1

0

where is id of のwarような URL を介してインスタンスの ID を明示的に渡し、それをビューで使用してオプションのforeignkey フィールドを適切に更新することができます。http://myserver/add_options/11war

別のオプションは、id をフォームの暗黙的/非表示の入力フィールドとして渡し、その id を使用warしてビュー内のインスタンスを識別することです。

余談ですが、継承を利用してモデル定義を簡素化できるかもしれません。お気に入り:

class base_option(models.Model):
    warval = models.ForeignKey(war)
    caption = models.CharField(max_length=20)
    user = models.ForeignKey(User)

class text_option(base_option):
    text = models.TextField(blank=True,null=True)

class url_option(base_option):
    url = models.URLField(blank=True,null=True)
于 2012-07-23T05:24:38.050 に答える