选择一个有效的选择.该选择不是可用的选择之一 [英] Select a valid choice. That choice is not one of the available choices
问题描述
在我的应用程序中,我有一个下拉菜单(部门),该下拉菜单取决于先前从下拉菜单(教职员工"字段)中选择的值.我正在使用ajax获取可以正常工作的新值.但是,当我尝试保存表单时,会得到选择一个有效的选择.该选择不是可用的选择之一.
In my app, i have a dropdown (department) that's depending on the previously selected value from a dropdown(faculty field). I am using ajax to get the new value which works fine. However, when i try saving the form, i get Select a valid choice. That choice is not one of the available choices.
这是我的模特
from django.db import models
from system.models import FacultyData, DepartmentData, SessionData, SemesterData, SettingsData
# Create your models here.
class SchoolFees(models.Model):
fid = models.ForeignKey(FacultyData, on_delete= models.SET_NULL, null=True)
did = models.ForeignKey(DepartmentData, on_delete= models.SET_NULL, null=True)
sid = models.ForeignKey(SessionData, on_delete= models.SET_NULL, null=True)
amount = models.CharField(max_length=30)
def __str__(self):
return self.amount
和我的form.py
and my form.py
from django import forms
from . import models
from system.models import FacultyData, DepartmentData, SessionData
from .models import SchoolFees
class FeesCreationForm(forms.ModelForm):
fid = forms.ModelChoiceField(queryset=FacultyData.objects.all(), empty_label="--Select Faculty--",
widget=forms.Select(attrs={'class': 'form-control'}))
did = forms.ModelChoiceField(queryset=DepartmentData.objects.all(), empty_label="--Select Faculty First--",
widget=forms.Select(attrs={'class': 'form-control'}))
sid = forms.ModelChoiceField(queryset=SessionData.objects.all(), empty_label="--Select Session--",
widget=forms.Select(attrs={'class': 'form-control'}))
class Meta:
model = models.SchoolFees
fields = ['sid', 'fid', 'did', 'amount']
widgets = {
'amount': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter Amount'})
}
def __init__(self, *args, **kwargs):
super(FeesCreationForm, self).__init__(*args, **kwargs)
self.fields['did'].queryset = DepartmentData.objects.none()
# Get did queryset for the selected fid
if 'fid' in self.data:
try:
fd = int(self.data.get('fid'))
self.fields['did'].queryset = DepartmentData.objects.filter(fid=fd).order_by('dept_name')
except (ValueError, TypeError):
pass # invalid input from the client; ignore and use empty queryset
在我的view.py中,我有一种根据所选择的系获取科系的方法.并节省新的费用
in my view.py, i have a method for getting department based on the faculty chosen. and also for saving the new fee
def create_fee(request):
app = settings.CONFIG
#table = FacultyTable(FacultyData.objects.all())
# RequestConfig(request, paginate={'per_page': 10}).configure(table)
context = {"form": FeesCreationForm, 'app': app}
return render(request, 'bursary.html', context)
def get_department(request):
fid = request.GET.get('fid', None)
datas = {
'is_taken': DepartmentData.objects.filter(fid=fid)
}
department = list(DepartmentData.objects.filter(fid=fid).values())
data = dict()
data['department'] = department
return JsonResponse(data)
def save_fee(request):
app = settings.CONFIG
# table = FacultyTable(FacultyData.objects.all())
# RequestConfig(request, paginate={'per_page': 10}).configure(table)
form = FeesCreationForm(request.POST)
context = {"form": FeesCreationForm, 'app': app}
if form.is_valid():
form.save()
messages.add_message(request, messages.SUCCESS, "Fees added successfully")
else:
messages.add_message(request, messages.ERROR, form.errors)
return redirect('bursary:create_fee')
我不知道我在哪里弄错了或者怎么解决
i don't know where i am getting this wrong or how to fix it
推荐答案
这是因为您将查询集初始化为空(可以),但是从不在表单对象本身中对其进行更新.因此服务器端验证失败.
This is because you initialize your queryset empty (which is fine), but never update it within the form object itself. So the server side validation is failing.
尝试在FeesCreationForm的 __ init __
方法中更新查询集:
Try updating your queryset in the __init__
method of your FeesCreationForm:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Init empty did queryset
self.fields['did'].queryset = DepartmentData.objects.none()
# Get did queryset for the selected fid
if 'fid' in self.data:
try:
fid = int(self.data.get('fid'))
self.fields['did'].queryset = DepartmentData.objects.filter(
fid=fid).order_by()
except (ValueError, TypeError):
# invalid input from the client; ignore and use empty queryset
pass
这篇关于选择一个有效的选择.该选择不是可用的选择之一的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!