模型.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
我正在尝试创建一个通过在views.py函数中传递的“league_id”参数进行过滤的表单。
我有两个对象,其中一个的 league_id 为 1,效果很好。
另一个 league_id 为 2 的选项抛出“选择一个有效的选项。该选项不是可用的选项之一。”错误。
知道为什么它适用于第一个 ID 而不适用于第二个吗?
您正在检查表单是否有效后设置表单字段的查询集。
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)