繁体   English   中英

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

[英]Django simple queryset in form field

我在以前的答案中找不到任何解决方案,所以我在这里问如何注册由queryset生成的表单字段的结果。 也许我在这里做错了一些简单的事情,无论我的模型如何:

@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应该是选择的一个实例,我找不到任何有关如何解决此问题的教程。 如果您可以帮助,将不胜感激。

编辑您的联系表

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

而且您不需要其他形式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM