2010-03-26 68 views
-1

我想在同一个模板上添加相同的django表单实例。我已经添加了一个之前和其他添加动态使用JavaScript。使用javascript动态插入django表单到模板中?

例如“形式”是django的形式newcell.innerHTML = {{ form.firstname }}; 的问题是,当我提交表单,鉴于请求对象只有一个值(即不添加使用JavaScript)我怎样才能得到。动态添加的其他表单元素值的值运行时

这与gmail中的“附加另一个文件”功能类似,其中向用户呈现文件上传字段并将新字段添加到DOM随着用户点击“附加另一个文件”加按钮

+0

目前尚不清楚你的问题是什么。请你能详细解释一下。 – 2010-03-26 10:52:49

+0

它就像gmail中的“附加另一个文件”功能,用户在其中显示文件上传字段,并且随着用户点击“附加另一个文件”加上按钮 – qulzam 2010-03-26 11:44:25

+2

I认为你应该向我们展示更多你的代码。根据你的说法,我认为你很可能实际上试图将多个值传递给一个表单字段。你应该看一下“formset”和“inline formsets”。 – 2010-03-26 12:45:07

回答

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。只要确保在ThingForm之前处理FileForm,以便文件可用于Thing。

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