2013-03-24 12 views
8

Mam formularz z ModelChoiceField, i chcę załadować na nim tabelę z mojego DB. Jeśli mogę użyć tego queryset na init, moja forma, a następnie form.is_valid moim zdaniem za działa dobrze:Django - Jak działa zestaw zapytań ModelChoiceField?

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

enter image description here

Ten kod pokazać listy identyfikator użytkownika na ModelChoiceField, ale co potrzebne jest, aby pokazać kategorie lista. Więc używam:

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

Ale za pomocą tego kodu .is_valid nie walidacji i recive błąd forma: „Wybierz poprawny wybór Wybór ten nie jest dostępny jeden z wyborów.”. Jakiś trop o tym, co może być problemem?

Error recived

MODEL

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

FORMULARZ

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) 

Odpowiedz

13

Nie używaj values_list (lub values) ModelChoiceField potrzebuje rzeczywistych obiektów modelowych.

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

 

ModelChoiceField użyje podstawowe klucze obiektów do walidacji i ich reprezentacji Unicode dla wyświetlania. Więc trzeba będzie określić konwersję do Unicode w modelu:

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 documentation

The __unicode__ method of the model will be called to generate string representations of the objects for use in the field’s choices;

Powiązane problemy