Python 传递布局时,带有FormHelper的自定义ModelForm在每次刷新后重新附加按钮Div

Python 传递布局时,带有FormHelper的自定义ModelForm在每次刷新后重新附加按钮Div,python,django,django-crispy-forms,Python,Django,Django Crispy Forms,为了使我的ModelForm保持干燥,我使用FormHelper创建了一个自定义ModelForm,这样我就可以在布局中添加一个Div和一个Cancel按钮。它还提供了添加自定义布局的可能性 当我不指定自定义布局时,这种方法非常有效,但当我指定自定义布局时,每次刷新页面时,它都会附加按钮Div(没有自定义布局时不会发生这种情况) 这是自定义的模型格式: class ModelFormWithHelper(ModelForm): 定义初始化(self,*args,**kwargs): super(

为了使我的
ModelForm
保持干燥,我使用
FormHelper
创建了一个自定义
ModelForm
,这样我就可以在
布局中添加一个
Div
和一个
Cancel
按钮。它还提供了添加自定义布局的可能性

当我不指定自定义布局时,这种方法非常有效,但当我指定自定义布局时,每次刷新页面时,它都会附加按钮
Div
(没有自定义布局时不会发生这种情况)

这是自定义的
模型格式

class ModelFormWithHelper(ModelForm):
定义初始化(self,*args,**kwargs):
super()
kwargs=self.get\u helper\u kwargs()
helper\u class=FormHelper(self)
如果kwargs中的“自定义_布局”:
self.helper.layout=kwargs['custom_layout']
self.helper.form_class='form horizontal'
self.helper.label_class='col-md-12'
self.helper.field_class='col-md-12'
self.helper.layout.append(
Div(
HTML(“
”), 形态( 提交(“提交”、“保存”), HTML(“”) ), css_class='row justify资源中心', ), ) def get_helper_kwargs(自我): kwargs={} 对于attr,self.Meta.\uuu dict\uuu.items()中的值: 如果attr.startswith('helper_'): 新属性=属性拆分(“”,1)[1] kwargs[new_attr]=值 返回kwargs
这是
模型格式

class货物表单(ModelFormWithHelper):
类元:
型号=货物
排除=[]
助手\自定义\布局=布局(
Div(
“姓名”,
“命令”,
css_class='col-6偏移量-3',
),
)
这是我刷新页面3次后没有自定义_布局的表单:

这是在我刷新页面3次后具有自定义_布局的表单:

我知道我可以使用
self.helper.add输入
方法来避免这个问题,但是我将无法将de按钮居中

如果有人能帮我解决这个重新附加的问题,我将不胜感激。
提前谢谢。

在几乎精神崩溃之后,我终于明白了

对于任何试图实现相同目标的人,这里有一个解决方案(我放弃了
get\u helper\u kwargs
方法,因为我只使用
helper\u custom\u布局

#将其放入变量中以避免重复两次
按钮\u布局=布局(
Div(
HTML(“
”), 形态( 提交(“提交”、“保存”), HTML(“”) ), css_class='row justify资源中心', ), ) 类ModelFormWithHelper(ModelForm): 定义初始化(self,*args,**kwargs): super() custom\u layout=getattr(self.Meta,“helper\u custom\u layout”,无) self.helper=FormHelper(self) self.helper.form_class='form horizontal' self.helper.label_class='col-md-12' self.helper.field_class='col-md-12' 如果是自定义布局: self.helper.layout=布局(自定义布局、按钮布局) 其他: self.helper.layout.append(按钮和布局)

就这样。现在,您可以使自定义的
布局更加干燥。希望你能发现这个有用

您是否尝试过添加布局的方法?Hello@DanielHolmes,是的,但遗憾的是结果是一样的。