0

モデル B への外部キーを持つモデル A からモデルフォームを作成したいと思います。

class A(models.Model):
    a = models.CharField(...)
    b = models.ForeignKey(B)
    c = models.CharField(...)

class B(models.Model):
    a = models.IntegerField(...)
    b = models.CharField(...)
    c = models.BooleanField(...)

だから私はこれをしました:

class AForm(forms.ModelForm):
    class Meta:
        model = A

しかし、私はいくつかのフィールドだけが欲しい:

class AForm(forms.ModelForm):
    class Meta:
        model = A
        fields = ('a', 'b')

問題はここにあります.bをBオブジェクトのリストにしたくないのですが、フィールドBaとBcが必要です(たとえば)。「fields = ('a', 'ba', 'bc')」と「fields = ('a', 'b_ a', b _c')」を試してみましたが、無駄でした。

だから私はインライン formsetsに来ましたが、インラインのフィールドのセットを制限するものは何も見ませんでした。

私は何をすべきか ?ありがとう。

4

3 に答える 3

1

このようにインラインフィールドを制限できます(もちろん、フォームを検証する必要があります。JavaScriptまたはデフォルト値を使用してギャップを設定できます)

class MyModelInline(admin.TabularInline):
    model = MyModel
    fields = ["x", "y", "z"]

    #fk_name = "..."
    #max_num = 1
    #extra = 0
于 2012-08-29T11:08:53.553 に答える
0

inlineformset_factoryこれformは、「B」オブジェクトのモデルフォーム クラスです。fields = ('a', 'b')そのため、 in でフォーム クラスを定義し、Metaそれを関数に渡すと役立ちます。

于 2012-08-29T11:21:48.437 に答える
0

選択フィールドに「B」の適切なテキストを表示する場合は、モデルにメソッドをB追加し、__unicode__フィールドを使用して文字列を返しますB

例えば。

class B(models.Model):
    a = models.IntegerField(...)
    b = models.CharField(...)
    c = models.BooleanField(...)
    def __unicode__(self):
         return u''+str(self.a) + ':' + self.b
于 2012-08-29T11:17:15.383 に答える