1

ModelFormに関連付けられているモデルオブジェクトにアクセスするにはどうすればよいですか?self.Meta.modelのようなもの?私のモデルとフォームは次のように定義されています。「self.Meta.model.attribute」でモデルの属性にアクセスしようとしていますが、これは機能しません。

class Attribute(models.Model):
    name = models.CharField(max_length=64)

class AttributeIndex(models.Model):
    product = models.OneToOneField(Product)
    attribute = models.ManyToManyField(Attribute)

class AttributeIndexForm(forms.ModelForm):
    class Meta: 
        model = AttributeIndex  
    def __init__(self, *args, **kwargs):
        super(AttributeIndexForm, self).__init__(*args, **kwargs)
        self.fields['attribute'] = forms.ModelMultipleChoiceField(queryset=self.Meta.model.attribute.all, widget=widgets.FilteredSelectMultiple("Attributes", is_stacked=False))
4

2 に答える 2

2

でモデルを宣言すると

class MyModel(models.Model):
    class Meta:
        something = 'foo'

またはModelForm

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

特に、クラス定義を「読み取る」ときに、属性を として設定/置換する特別なメタクラスがあります。Meta_meta

したがって、ModelForm で関連付けられたモデルにアクセスするには、次のようにします。

AttributeIndexForm._meta.model

attributeただし、フィールドのクエリセットをカスタマイズしたいだけの特定の状況では、次のことを行う必要があります。

class AttributeIndexForm(forms.ModelForm):
    class Meta: 
        model = AttributeIndex  
    def __init__(self, *args, **kwargs):
        super(AttributeIndexForm, self).__init__(*args, **kwargs)
        self.fields['attribute'].queryset = Attribute.objects.filter(..condition..)
        self.fields['attribute'].widget = widgets.FilteredSelectMultiple("Attributes", is_stacked=False))
于 2012-11-14T23:49:01.353 に答える
0

「self.instance」が機能することがわかりました。これはまさに私が望むものです:

 self.fields['attribute'].queryset = self.instance.attribute.all()
于 2012-11-15T00:51:29.213 に答える