django中的动态表单选择/选项字段

时间:2017-03-11 19:09:46

标签: python django django-forms

我制作了这个网络应用https://notes12345.herokuapp.com

此应用的代码位于:https://github.com/theparadoxer02/Notes

想要的是以这样的方式制作搜索表单:当用户选择年份时,分支的选择是动态生成的,意味着只有分支选项应该来自选定年份,当选择分支选项时,那么主题的选项应该与选定的年份相关,上面的分支。 所以这样我想生成表单。

我应该学习什么?我应该在views.py或models.py中修改文件?我坚持不懈。

这是我的模型文件:

year_choices = (
        ( 1  , 'First' ),
        ( 2  , 'Second'),
        ( 3  , 'Third' ),
        ( 4  , 'Fourth')
  )
branch_choices = (
        ( 'IT','IT'  ),
        ( 'EE','EE'  ),
        ( 'CSE','CSE'),
        ( 'EC','EC'  ),
        ( 'ME','ME'  ),
        ( 'CE','CE'  ),
  )


subject_choices = (
        ( 'DS' , 'Data Structure'  ),
        ( 'OS' , 'Operating sytem' ),
        ( 'EC' , 'Ecomomics'       ),
        ( 'Thermo' , 'Thermo'      ),
  )

def generate_picture_name(instance, filename):
    url = "images/{0}_{1}_{2}.jpg".format(
        instance.subjects.branch, instance.subjects.year, instance.unit_no)
    return url


class Subject(models.Model):
  name = models.CharField(max_length=20)
  no_of_units = models.IntegerField()
  year=models.IntegerField(choices=year_choices)
  branch=models.CharField(choices=branch_choices,max_length=15)

  def __str__(self):
      return self.name



class Note(models.Model):
  #unit_choices = ((1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7'),(8,'8'),(9,'9'),(10,'10'))
  #branch = models.CharField(max_length=55,choices=branch_choices)
  #year = models.IntegerField(choices = year_choices)
  #subject_name = models.CharField(choices=subject_choices,max_length=10)
  subjects = models.ForeignKey(Subject,on_delete=models.CASCADE)
  unit_no = models.IntegerField()
  picture = models.ImageField(upload_to = generate_picture_name)

  def __str__(self):
return str(self.id)

2 个答案:

答案 0 :(得分:1)

您可以使用intercooler.js专门通过文档中提到的dependent Select功能轻松完成此操作。

答案 1 :(得分:0)

您有两种选择:

  • 要么在服务器端做任何事情。

    • 在这种情况下,在两个django视图中拆分搜索表单。
    • 第一个视图,显示仅包含年份的表单。将表单提交到第二个视图(使用<form action="url_for_second_view">
    • 第二个视图,阅读所选年份,并使用表单回复其他选项。
  • 或者在客户端使用javascript在年份变化时动态设置可用选项。