2013-03-24 6 views
8

У меня есть форма с ModelChoiceField, и я хочу загрузить на нее таблицу из моей БД. Если я использую эту QuerySet на инициализации моей формы, а затем form.is_valid мой взгляд работает нормально:Django - Как работает набор запросов ModelChoiceField?

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

enter image description here

Этот код показывает список идентификатор находится на ModelChoiceField, но то, что мне нужно это, чтобы показать категории список. Поэтому я использую:

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

Но с помощью этого кода .is_valid не проверяю и я Получать ошибку формы: «Выберите правильный выбор Этого выбора не один из вариантов имеющихся..» Некоторые подсказывают, что может быть проблемой?

Error recived

МОДЕЛЬ

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) 

ответ

13

Не используйте 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 documentation

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

Смежные вопросы