Django - 输入值列表

时间:2015-03-04 11:06:57

标签: django django-models django-forms

我的模特:

class Annonce(models.Model):
    created_at = models.DateTimeField(editable=False)
    modified_at = models.DateTimeField()
    title = models.CharField(max_length=24)
    domaines = models.ManyToManyField(Domaine, null=True,related_name="%(app_label)s_%(class)s_related")

我的表格:

class annonceForm(forms.ModelForm) :
    class Meta : 
        model = Annonce
        fields = ['title','domaines','presentation']
        widgets = {
            'domaines': forms.Select(attrs={'size': 1}),
            }

def __init__(self, *args, **kwargs):
    super(annonceForm, self).__init__(*args, **kwargs)
    self.fields['domaines'].required = False
    self.fields['domaines'].queryset = Domaine.objects.all().values_list("nom",flat=True)

当我想以我的形式annonceForm保存一个Annonce时,我有这样的错误消息:

  

"输入值列表"在Select of" domaines"

之下

2 个答案:

答案 0 :(得分:0)

对于M2M关系,您应该在表单类中使用MultipleChoiceField它的小部件SelectMultiple:

https://docs.djangoproject.com/en/1.7/ref/forms/fields/#multiplechoicefield

当您的表单发送单个值时,Django需要一个值列表或M2M关系的空列表。 想想单选字段如何显示现有Annonce的多个值,它不能。

答案 1 :(得分:0)

域为ManyToManyField,适合您需要的表单小部件将是form.SelectMultiple

category = forms.ModelMultipleChoiceField(
    queryset=ProductCategory.objects.filter(is_published=True),
    widget=forms.SelectMultiple(attrs={'multiple': ''}),)