[英]Django Modelform doesn't accept selection on POST
下拉列表正确显示在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})
在RegistrationForm
的__init__()
方法中, self.fields['course'].queryset = ...values_list('datetime', flat=True)
返回datetime
实例。 参见values_list()
docs 。
我相信这可能会引起问题。 我猜想queryset
应该返回基于Django docs的 CourseModel
实例:
ForeignKey由django.forms.ModelChoiceField表示,这是一个ChoiceField,其选择是模型QuerySet。
此外,您的RegistrationModel.course
字段具有'self'
的外键,而不是CourseModel
。 不知道那是不是你想要的。
设置字段查询集的其他示例可以在此处找到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.