11

ModelChoiceFieldを含むフォームがあり、DBからテーブルをロードしたいと思います。フォームのinitでこのクエリセットを使用すると、ビューのform.is_validは正常に機能します。

self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('idCategoria',flat=True)

ここに画像の説明を入力してください

そのコードはModelChoiceFieldにIDのリストを表示しますが、必要なのはカテゴリリストを表示することです。だから私は使用します:

self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('categoria',flat=True)

しかし、このコード.is_validを使用しても検証されず、フォームエラーが表示されます:「有効な選択肢を選択してください。その選択肢は利用可能な選択肢の1つではありません。」何が問題になるのかについての手がかりはありますか?

エラーを受信しました

モデル

class sitio_categoria(models.Model):
    idCategoria         =   models.AutoField(primary_key=True)
    categoria           =   models.CharField(max_length=30, null=False, unique=True)

class anadirComercioPaso1_form(forms.Form):
        categoria_formfield = forms.ModelChoiceField(widget=forms.Select(attrs={'size':'13', 'onchange':'this.form.action=this.form.submit()'}), queryset=sitio_categoria.objects.none())

def __init__(self, *args, **kwargs):
        super(anadirComercioPaso1_form, self).__init__(*args,**kwargs)
        self.fields['categoria_formfield'].queryset = sitio_categoria.objects.exclude(categoria='patrimonio').values_list('categoria',flat=True)
4

1 に答える 1

15

values_list、(またはvalues)を使用しないでくださいModelChoiceField。実際のモデルオブジェクトが必要です。

queryset = sitio_categoria.objects.exclude(categoria='patrimonio')

 

ModelChoiceField検証にはオブジェクトの主キーを使用し、表示にはそれらのユニコード表現を使用します。したがって、モデルでユニコードへの変換を定義する必要があります。

class sitio_categoria(models.Model):
    idCategoria = models.AutoField(primary_key=True)
    categoria = models.CharField(max_length=30, null=False, unique=True)

    def __unicode__(self):
        return self.categoria

 

ModelChoiceFieldのドキュメント

モデルの__unicode__メソッドは、フィールドの選択で使用するオブジェクトの文字列表現を生成するために呼び出されます。

于 2013-03-24T20:07:46.187 に答える