Django表单未选择选项

2024-10-01 13:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django项目,在这个项目中我有一个django表单.py其中包含字段调用类别,该类别选择作为数据库查询结果生成的框输入元素。 如果我从数据库的“选择”下拉列表中选择一个选项,我会不断得到错误:

**strong text**Select a valid choice. That choice is not one of the available choices

代码如下:

你知道吗表单.py你知道吗

from django import forms
#from django.contrib.auth.models import User
from signer.models import CreateSingleSigner

class CreateSingleSignerForm(forms.ModelForm):
    category = forms.ModelChoiceField(
        required = True,
        help_text = 'category', 
        queryset=CreateSingleSigner.objects.all().values_list(
                'category', flat=True
            ).distinct()
    )

我的观点。你知道吗

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from signer.models import CreateSingleSigner
from signer.forms import CreateSingleSignerForm
from django.template import RequestContext

def singlesigner(request):
    context = {}
    if request.method == 'POST':
        createsinglesigner_form = CreateSingleSignerForm(data=request.POST)
        if createsinglesigner_form.is_valid():  
            createsinglesigner.category = request.POST['category']
            createsinglesigner_form.save()
        else:
            print createsinglesigner_form.errors
    else:
        # context['createsinglesigner'] = CreateSingleSigner()
        createsinglesigner_form =CreateSingleSignerForm()

    return render(request, "signer/singlesigner.html", {"createsinglesigner_form":createsinglesigner_form}, RequestContext(request))

我的型号.py你知道吗

from django.db import models

class CreateSingleSigner(models.Model):
        category = models.CharField(max_length = 32)

有人能告诉我哪里出了问题吗?你知道吗


Tags: 项目djangofrompyimportformmodelsrequest
1条回答
网友
1楼 · 发布于 2024-10-01 13:34:06

请尝试以下方法之一解决问题:

  1. 尝试在CreateSingleSigner模型中定义unicode的转换:

    class CreateSingleSignerForm(forms.Form):
    
        def __unicode__(self):
            return self. category
    

解释: ModelChoiceField将使用指定字段的__unicode__表示来显示和验证字段。你知道吗

  1. 尝试在窗体的__init__方法中设置选项

    class CreateSingleSignerForm(forms.Form):
        category = forms.ChoiceField(choices=[], required=False)
    
        def __init__(self, *args, **kwargs):
            super(CreateSingleSignerForm, self).__init__(*args, **kwargs)
            self.fields['category'].choices = CreateSingleSigner.objects.all().values_list('category', flat=True).distinct()
    

    解释:用于ModelChoiceFieldqueryset参数不能是values_list,因为它将保存关系,所以django必须使用完整的模型对象,而不是模型对象的特定值。

相关问题 更多 >