Django 从多对多字段动态生成表单选项

1 投票
1 回答
2872 浏览
提问于 2025-04-17 00:26

我正在尝试创建一个可以显示动态选择的表单。

我想知道如何制作一个表单,其中运动员的运动项目是一个选择框,这个选择框里的内容是和运动员参加的赛事相关的运动。

我的模型如下所示...

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 请求。

撰写回答