Django 错误:“选择一个有效的选项。该选项不是可用的选项之一。”表单适用于一个 ID,但不适用于另一个

问题描述 投票:0回答:1

模型.py

class PointCategoryRecord(models.Model):
    point_category_assignment_id = models.AutoField(primary_key=True)
    league_id = models.ForeignKey(League)
    description = models.TextField(default="")
    user_getting_points = models.ForeignKey(TeamMember)
    date_created = models.DateTimeField(auto_now=True)

表格.py

class UserForm(ModelForm):
    class Meta:
        model = PointCategoryRecord
        fields = '__all__'

视图.py

def point_form(request, league_id):
    form = UserForm()

    if request.method == "POST":
        if form.is_valid():
            form.save()
            return redirect(request.path_info)

    form.fields['league_id'].queryset = League.objects.filter(league_id = league_id)
    form.fields['point_category'].queryset = PointCategory.objects.filter(league_id = league_id)
    form.fields['user_getting_points'].queryset = TeamMember.objects.filter(league_id = league_id)

url.py

  • 我的路径()正确,它通过 int:league_id 传递 league_id

我正在尝试创建一个通过在views.py函数中传递的“league_id”参数进行过滤的表单。

我有两个对象,其中一个的 league_id 为 1,效果很好。

另一个 league_id 为 2 的选项抛出“选择一个有效的选项。该选项不是可用的选项之一。”错误。

知道为什么它适用于第一个 ID 而不适用于第二个吗?

python django django-views django-forms
1个回答
0
投票

您正在检查表单是否有效后设置表单字段的查询集。

def point_form(request, league_id):
    form = UserForm(request.POST or None)  # <-- You should initialize the form with request.POST or None

    if request.method == "POST":
        if form.is_valid():  # <-- By the time you get here, the form is already invalid
            form.save()
            return redirect(request.path_info)

    # The following lines should be before the form.is_valid() check
    form.fields['league_id'].queryset = League.objects.filter(league_id=league_id)
    form.fields['point_category'].queryset = PointCategory.objects.filter(league_id=league_id)
    form.fields['user_getting_points'].queryset = TeamMember.objects.filter(league_id=league_id)

© www.soinside.com 2019 - 2024. All rights reserved.