【问题标题】:Django simple queryset in form field表单字段中的 Django 简单查询集
【发布时间】:2016-12-20 05:33:23
【问题描述】:

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

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

【问题讨论】:

标签: python django forms


【解决方案1】:

编辑您的联系表

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

而且你不需要其他形式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2018-06-02
    • 2013-04-05
    • 2012-06-29
    • 2016-07-20
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多