使用javascript动态地将django表单插入到模板中?

时间:2010-03-26 10:41:51

标签: django django-templates django-forms

我想在同一个模板上添加相同的django表单实例。我已经添加了一个,其他使用javascript动态添加。

例如'form'是 django表单newcell.innerHTML = {{ form.firstname }}; 问题是,当我提交表单时,在视图中请求对象只有一个值(不是使用javascript添加)。如何获取动态添加的其他表单元素值的值。

类似于gmail中的“附加另一个文件”功能,向用户显示文件上载字段,当用户点击“附加另一个文件”时,会立即将新字段添加到DOM中“加按钮

1 个答案:

答案 0 :(得分:0)

您可以随时尝试将FileField分离为FileModel

看一下下面的伪代码(就像基于内存的python一样 - 我现在已经转到了clojure)。

models.py

class FileModel(models.Model):
  file = models.FileField()
  ...

class ThingToWhichYoureAttaching(models.Model):
  name = models.CharField()
  attachments = models.ManyToManyField(FileModel)
  ...

forms.py

class FileForm(forms.ModelForm):
  class Meta:
    model=FileModel

class ThingForm(forms.ModelForm):
  attachments = forms.MultipleChoiceField()#override the manytomany form field with style field of your choice.
  class Meta:
    model=ThingToWhichYoureAttaching

当他们使用加号按钮弹出窗口时,显示FileForm,但在主页面上保持ThingForm不变。对于没有javascript的人,您还可以在主页面上使用ThingForm创建初始FileField。只需确保在FileForm之前处理ThingForm,以便文件可用于事物。

处理弹出窗体时,您可以使用AJAX(我建议jquery)将FileForm提交给服务器,并返回标记以在“附件”字段中插入文件。