Django – Come ModelChoiceField queryset opere?

Ho un form con un ModelChoiceField, e voglio caricare su di esso una tabella del mio DB. Se io uso questo queryset sul mio modulo di inizializzazione, quindi il mio punto di vista della forma.is_valid funziona bene:

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

Django - Come ModelChoiceField queryset opere?

Che il codice mostra un id elenco ModelChoiceField, ma ciò di cui ho bisogno è di mostrare l’elenco di categorie. Quindi uso:

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

Ma utilizzando questo codice .is_valid non convalidare e ho effettuato una forma di errore: “Selezionare una scelta valida. La scelta non è uno dei disponibile scelte”. Qualche indizio su quello che potrebbe essere il problema?

Django - Come ModelChoiceField queryset opere?

MODELLO

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

FORMA

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)

 

One Reply
  1. 14

    Non utilizzare values_list, (o values), ModelChoiceField bisogni effettivi del modello di oggetti.

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

     

    ModelChoiceField di usare le chiavi primarie di oggetti per la convalida e la loro rappresentazione unicode per la visualizzazione. Quindi sarà necessario definire la conversione unicode del modello:

    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 documentazione

    Il __unicode__ metodo del modello sarà chiamato a generare rappresentazioni di stringa di oggetti per l’utilizzo in campo scelte;

Lascia un commento