来自 ManyToMany 字段的 Django 动态表单选择

ell*_*lly 1 django django-models django-forms

我正在尝试构建一个显示动态选择的表单

我如何建立一个表格,其中运动员的运动是一个选择字段,其中填充了与运动员参加的事件相关的运动......

我的模型如下...

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)
Run Code Online (Sandbox Code Playgroud)

Pan*_*nnu 5

我假设您在构建表单时知道事件代码这是您过滤的方式EventCode

sport_choices = EventCode.objects.filter(pk=event).values_list('Sports','Sports__Type')
Run Code Online (Sandbox Code Playgroud)

假设事件是跳跃,那么你会得到 [(5,'long jump'),(7,'frog jump')....]

现在你设置相关选项的方式是

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')
Run Code Online (Sandbox Code Playgroud)

如果您想event在表单中选择 an 时执行此操作,则可以为所选事件传递eventas ajax requestgeneratesport_choices并将其作为对 ajax 请求的响应返回。