在单个HTML表单中,我将呈现不同的Django模型。将对象ID添加到Django表单中的字段名称中
这些表单可能(也可能会)具有相同的字段名称(如“内容”)。因此,我需要将模型实例的对象ID附加到表单中的每个字段,以确保它们具有唯一的HTML输入名称)。我做这在初始化像这样:
class Edit_Text_Block_Form(ModelForm):
content = forms.CharField(widget = forms.Textarea(
attrs = {
"class": "full_tinymce"
}),
label = "",
)
class Meta:
model = TextBlock
fields = []
def __init__(self, user, *args, **kwargs):
self.user = user
super(Edit_Text_Block_Form, self).__init__(*args, **kwargs)
old_fields = self.fields
new_fields = {}
for field in old_fields:
new_fields[str(self.instance.id)+"_"+field] = self.fields[field]
self.fields = {}
for field in new_fields:
self.fields[field] = new_fields[field]
这工作得很好,和HTML姓名和ID,如“96_content”,这是我想要的东西呈现。
但是,保存时,它会查看我的字段以保存“内容”字段,因为它仅显示“96_内容”并且感到困惑。因此,我需要重写模型保存功能。我一直这样做:
def save(self, *args, **kwargs):
old_fields = {}
for field in self.fields:
real_name = field.split("_")[1]
old_fields[real_name] = self.fields[field]
self.fields = old_fields
super(Edit_Text_Block_Form, self).save(*args, **kwargs)
但是,这是不工作的原因,我不明白。保存功能完成没有错误,但没有任何形式的变化。我唯一的猜测是,当我做old_fields [real_name] = self.fields [field]时,字段值可能不会被复制。
我的主要问题是:如何让我的保存功能正确保存数据的字段后,我在初始化(已经改变了他们的名字)和save()
我希望问题在改回来是:我有更好的方式来做这件事吗? (通过“本”,我的意思是“命名空间的每个HTML场用的ModelForm的实例的OBJECT_ID,以确保其唯一性与包含在相同的HTML表单中的其他字段)?
感谢您的帮助!
我不想因为我学到了很多关于Django内部工作的知识,所以称其为过去的24小时“浪费时间”本身。与我正在做的事情相比,这是非常简单的事情,但不要因为没有仔细阅读表格文档而尖叫自己。它们确实是不同的形式,所以前缀是要走的路。非常感谢! – 2015-02-11 18:36:56