在 Django 中生成表单
我想在 django 中生成动态表单。假设我有一个模型,其中包含由表单的所有字段组成的选择。如果我的用户选择文本区域选项并给出标签名称,则表单应显示带有给定标签的文本区域。它可以是文本输入、单选按钮等。
所以我的模型看起来像:
TYPE_CHOICES = (
(u'TextField',u'TextField'),
(u'TextArea',u'TextArea'),
)
class SocietyForm(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
form_info = models.ForeignKey(FormInfo)
class FormInfo(models.Model):
label = models.CharField(max_length=255)
content_type = models.CharField(max_length=100,choices=TYPE_CHOICES)
form_info = models.ForeignKey(SocietyForm)
到目前为止一切都很好,但是当涉及到生成小部件时,我不知道这里=) 我想,如果我根据所选的选择生成一个字典,那么我可以将它分配给表单的小部件。
'''
def select_form_type(instance):
dict = {}
if instance.content_type == "TextField":
dict.update({'%s'instance.label:forms.TextInput()})
else:
dict.update({'%s'instance.label:forms.Textarea()})
return dict
'''
#class SocietyJoinForm(forms.ModelForm,instance):
但是,SocietyJoinForm 无法识别实例输入。那么有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我只是碰巧在查看所有较旧的问题时偶然发现了您的问题。如果您已经弄清楚了这一点,请告诉我。
IMO,最简单的方法是使用 Javascript。实际上,您无法在 Django 中更改此设置,除非您创建了自己的表单对象,在这种情况下,您很可能仍然需要使用 Javascript。你可以做这样的事情:
希望有帮助。
I just happened to stumble upon your question looking at all the older ones. Let me know if you've already figured this out.
IMO, the easiest way would be to use Javascript. You wouldn't actually be able to change this in Django unless you created your own form object, in which case you'd most likely still have to use Javascript. You could do something like this:
Hope that helps.