Django Modelform不接受POST上的选择

2024-09-30 20:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下拉列表在html中正确显示,但是我不明白为什么在尝试提交/时一次又一次地遇到相同的错误。你知道吗

“请选择一个有效的选项。这个选择不是可用的选择之一。”

问题背景

我在Django定义了两个模型。一个CourseModel数据库保存所有提供的课程,一个注册数据库将课程链接到用户。你知道吗

你知道吗型号.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创建一个注册表单,用户可以从下拉列表中订阅课程。你知道吗

你知道吗表单.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__'

你知道吗视图.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})

Tags: djangofromimportselfformhomedatetimemodels
1条回答
网友
1楼 · 发布于 2024-09-30 20:34:03

RegistrationForm__init__()方法中,self.fields['course'].queryset = ...values_list('datetime', flat=True)返回datetime实例。见^{} docs。你知道吗

我相信这可能会引起问题。我猜queryset应该返回CourseModel实例,基于Django docs

ForeignKey is represented by django.forms.ModelChoiceField, which is a ChoiceField whose choices are a model QuerySet.

另外,您的RegistrationModel.course字段有一个指向'self'的外键,而不是CourseModel。不确定这是否是你想要的。你知道吗

设置字段queryset的其他示例可以在here中找到。你知道吗

相关问题 更多 >