Django 从多对多字段动态生成表单选项
我正在尝试创建一个可以显示动态选择的表单。
我想知道如何制作一个表单,其中运动员的运动项目是一个选择框,这个选择框里的内容是和运动员参加的赛事相关的运动。
我的模型如下所示...
class Sport(models.Model):
Type = models.CharField(max_length=15)
class EventCode(models.Model):
Description = models.CharField(max_length=95)
Sports = models.ManyToManyField(Sport)
class Athlete(models.Model):
Event = models.ForeignKey(EventCode)
Sport = models.ForeignKey(Sport)
1 个回答
5
我假设你在制作表单的时候知道事件代码。下面是你如何根据 EventCode
进行筛选的方法:
sport_choices = EventCode.objects.filter(pk=event).values_list('Sports','Sports__Type')
假设这个事件是跳跃,那么你会得到 [(5,'跳远'),(7,'蛙跳')....]
现在,设置相关选项的方法是:
Class AthleteForm(ModelForm):
class Meta:
model = Athlete
def __init__(self,*args, **kwargs):
super(AthleteForm, self).__init__(*args, **kwargs)
event = kwargs['event']
self.fields['Event'].initial = event
self.fields['Sport'].choices = EventCode.objects.filter(pk=event).values_list('Sports','Sports__Type')
如果你想在表单中选择一个 event
时执行这个操作,你可以把 event
作为 ajax 请求
发送,这样就可以为选定的事件生成 sport_choices
,并将其作为响应返回给 ajax 请求。