在單個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