该下拉列表正确显示在html中,但是当我尝试提交/时,我无法弄清为什么一次又一次遇到相同的错误。
“选择一个有效的选择。该选择不是可用的选择之一。”
问题上下文
我在Django中定义了两个模型。一个CourseModel数据库保存所有提供的课程,一个注册数据库将课程链接到用户。
models.py
from django.db import models
# Create your models here.
class CourseModel(models.Model):
course = models.CharField(max_length=100)
date = models.DateField(max_length=100)
time = models.TimeField()
location = models.CharField(max_length=100)
datetime = models.DateTimeField()
class RegistrationModel(models.Model):
name = models.CharField(max_length=100)
adress = models.CharField(max_length=100)
city = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
course = models.ForeignKey('self', on_delete=models.CASCADE)
def __str__(self):
return self.name
我使用modelForm创建注册表单,用户可以在其中从下拉列表中订阅课程。
forms.py
from django.forms import ModelForm, RegexField
from home.models import RegistrationModel, CourseModel
from django import forms
import datetime
class RegistrationForm(ModelForm):
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
self.fields['course'].queryset = CourseModel.objects.exclude(date__lt=datetime.datetime.today()).values_list('datetime', flat=True)
self.fields['course'].empty_label = None
class Meta:
model = RegistrationModel
fields = '__all__'
views.py
from django.shortcuts import render, redirect
from home.forms import RegistrationForm
from .models import CourseModel
import datetime
def home(request):
return render(request, 'home/home.html')
def registration(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
crs = request.POST.get('course')
print(crs)
if form.is_valid():
cleanform = form.save(commit=False)
cleanform.course = crs
cleanform.save()
return redirect('home')
else:
form = RegistrationForm()
return render(request, 'home/registration.html', {'form': form})
答案 0 :(得分:0)
在RegistrationForm
的{{1}}方法中,您的__init__()
返回self.fields['course'].queryset = ...values_list('datetime', flat=True)
实例。参见values_list()
docs。
我相信这可能会导致问题。我猜datetime
应该基于Django docs返回queryset
实例:
ForeignKey由django.forms.ModelChoiceField表示,这是一个ChoiceField,其选择是模型QuerySet。
此外,您的CourseModel
字段具有RegistrationModel.course
而不是'self'
的外键。不确定这是否是您想要的。
其他设置字段查询集的示例可以在here中找到。