Skip to main content
 首页 » 编程设计

python之Django 表单错误 : Select a valid choice. That choice is not one of the available choices

2025年01月19日27wayfarer

我正在尝试创建一个带有两个下拉菜单的网站:部门和类(class)编号。下拉菜单的数据来 self 的 SQL 数据库的“类(class)”表。现在我的网站正确初始化并在下拉菜单中显示正确的选项。然而,当用户在下拉菜单中选择一个选项并提交他们的选择时,Django 抛出一个“选择一个有效的选择。该选择不是可用的选择之一。”错误。我怀疑我的表单输出格式不正确,因此无法在我的数据库中找到选择,但我已经阅读了许多其他具有相同问题的 SO 问题,但仍然一无所获。感谢您的帮助。

模型.py

from django.db import models 
 
class Dept(models.Model): 
    dept = models.CharField(max_length=255, db_column = 'dept') 
    class Meta: 
        managed = False 
        db_table = 'courses' 
    def __str__(self): 
        return self.dept 
 
class Course_num(models.Model): 
    course_num = models.CharField(max_length=255, db_column = 'course_number') 
    class Meta: 
        managed = False 
        db_table = 'courses' 
    def __str__(self): 
        return self.course_num 

表单.py

from django import forms 
from .models import * 
 
class CourseForm(forms.Form): 
    dept = forms.ModelChoiceField( 
        queryset=Dept.objects.values_list('dept', flat = True).distinct().\ 
            order_by('dept').exclude(dept__isnull=True), 
        required=False, 
        empty_label="No preference", 
        label=u"Department") 
 
    course_num = forms.ModelChoiceField( 
        queryset=Course_num.objects.all().\ 
            order_by('course_num').values_list('course_num', flat = True).\ 
            distinct().exclude(course_num__isnull=True), 
        required=False, 
        empty_label="No preference", 
        label=u"Course Number") 

views.py

def home(request): 
    context = {} 
    res = None 
    form_CourseForm = CourseForm() 
    if request.method == 'GET': 
        form_CourseForm = CourseForm(request.GET) 
        args = {} 
            if form_CourseForm.is_valid(): 
            dept = form_CourseForm.cleaned_data['dept'] 
            if dept: 
                args['dept'] = dept 
            course_num = form_CourseForm.cleaned_data['course_num'] 
            if course_num: 
                args['course_num'] = course_num 
    ... 

请您参考如下方法:

改变你的查询集并尝试

class CourseForm(forms.Form): 
    dept = forms.ModelChoiceField( 
        queryset=Dept.objects.distinct(). 
        order_by('dept').exclude(dept__isnull=True), 
        required=False, 
        empty_label="No preference", 
        label=u"Department") 
 
    course_num = forms.ModelChoiceField( 
        queryset=Course_num.objects.distinct(). 
        order_by('course_num').exclude(course_num__isnull=True), 
        required=False, 
        empty_label="No preference", 
        label=u"Course Number")