繁体   English   中英

Django Modelform不接受POST上的选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM