表单字段中的Django简单查询集

时间:2016-08-13 08:40:22

标签: python django forms

我在以前的答案中找不到任何解决方案,所以我在这里询问如何注册查询集所形成的表单字段的结果。也许我在这里做错了一些简单的事情我的模型是什么:

@python_2_unicode_compatible
class Choice(models.Model):
    choice_text = models.CharField(max_length=100)
    def __str__(self):
        return self.choice_text


@python_2_unicode_compatible
class Contatto(models.Model):
    contatto_choice =  models.ForeignKey(Choice, on_delete=models.PROTECT)
    phone_number = models.CharField(max_length=12)
    email = models.CharField(max_length=100)
    text = models.CharField(max_length=250)
    def __str__(self):
        return self.email

class ContactForm(ModelForm):
    class Meta:
        model = Contatto
        fields = ['contatto_choice', 'phone_number','email','text']

我的forms.py是:

class ContactForm(forms.Form):
    contatto_choice = forms.ModelChoiceField(queryset=Choice.objects.all())
    phone_number = forms.CharField(max_length=12)
    email = forms.CharField(max_length=100)
    text = forms.CharField(widget=forms.Textarea, max_length=500)

我的观点是:

def contatti(request):
    if request.method=="POST":
        form = ContactForm(request.POST)
        if form.is_valid():
            contatto = Contatto()
            contatto.phone_number = form.cleaned_data['phone_number']
            contatto.email = form.cleaned_data['email']
            contatto.text = form.cleaned_data['text']
            contatto.contatto_choice = form.cleaned_data['contatto_choice']
            contatto.save()
            recipients = ['cercaservizi@gmail.com']
            send_mail("Contatto Cercaservizi", contatto.phone_number+' '+contatto.email+' '+contatto.text,contatto.email, recipients)
            return HttpResponseRedirect('/')
    else:
        form = ContactForm()
        return render(request, 'form.html', {'form': form})

提交表单的视图抱怨contatto_choice应该是一个选择的实例,我找不到任何关于如何解决这个问题的教程。如果你能提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

编辑您的ContactForm

class ContactForm(ModelForm):    
    contatto_choice = forms.ModelChoiceField(queryset=Choice.objects.all())
    class Meta:
        model = Contatto
        fields = ['contatto_choice', 'phone_number','email','text']

你不需要其他表格