Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 选择一个有效的选项。该选择不是可用的选择之一_Django_Django Models_Django Forms_Modelchoicefield - Fatal编程技术网

Django 选择一个有效的选项。该选择不是可用的选择之一

Django 选择一个有效的选项。该选择不是可用的选择之一,django,django-models,django-forms,modelchoicefield,Django,Django Models,Django Forms,Modelchoicefield,在我的应用程序中,我有一个下拉部门,它取决于先前从下拉字段中选择的值。我正在使用ajax来获得新的值,它工作得很好。然而,当我尝试保存表单时,我得到了一个有效的选择。该选择不是可用的选择之一 这是我的模型 from django.db import models from system.models import FacultyData, DepartmentData, SessionData, SemesterData, SettingsData # Create your models h

在我的应用程序中,我有一个下拉部门,它取决于先前从下拉字段中选择的值。我正在使用ajax来获得新的值,它工作得很好。然而,当我尝试保存表单时,我得到了一个有效的选择。该选择不是可用的选择之一

这是我的模型

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
还有我的表格

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
在我看来.py,我有一种基于所选教员获得系的方法。也为了节省新的费用

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')

我不知道我哪里出错了,也不知道如何修复它,这是因为您将queryset初始化为空,这很好,但从不在表单对象本身中更新它。因此,服务器端验证失败

尝试在FeesCreationForm的_init__方法中更新查询集:

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

这是因为您将queryset初始化为空,这很好,但从不在表单对象本身中更新它。因此,服务器端验证失败

尝试在FeesCreationForm的_init__方法中更新查询集:

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
释义

我有一个下拉列表,它取决于以前从另一个下拉列表中选择的值

我过去也有过类似的问题。回答你的问题了吗?基本思想是,您可以将所有正确的信息发送到您想要的客户机,但在一天结束时,服务器应该验证是否使用了正确的选项集。Django越来越生气,因为它认为发送到服务器进行第二次下拉的选择是无效的。收到帖子后,您需要根据作为下拉列表1的选择发送的内容动态获取第二个下拉列表的选择,然后尝试验证表单。

转述

我有一个下拉列表,它取决于以前从另一个下拉列表中选择的值


我过去也有过类似的问题。回答你的问题了吗?基本思想是,您可以将所有正确的信息发送到您想要的客户机,但在一天结束时,服务器应该验证是否使用了正确的选项集。Django越来越生气,因为它认为发送到服务器进行第二次下拉的选择是无效的。收到帖子后,您需要根据作为下拉列表1选择发送的内容动态获取第二个下拉列表的选择,然后尝试验证表单。

下面显示语法错误fid=intself.data.get'fid'| self.fields['did'].queryset=DepartmentData.objects.filterfid=fid.order_by@AkinniyiBodeBolade我更新了我的代码。我想有一个小的输入错误,但我仍然选择了一个有效的选择。该选项不是可用选项之一。以下显示语法错误fid=intself.data.get'fid'| self.fields['did'].queryset=DepartmentData.objects.filterfid=fid.order_by@AkinniyiBodeBolade我更新了我的代码。我想有一个小的输入错误,但我仍然选择了一个有效的选择。该选择不是可用的选择之一。