Django Modelform不接受POST上的选择

时间:2018-08-01 02:28:01

标签: python django

该下拉列表正确显示在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})

1 个答案:

答案 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中找到。