【发布时间】:2022-07-09 01:19:21
【问题描述】:
我有一个模型,它有一个“关键字”字段。当我使用表单创建/修改记录时,我可以清理该字段然后保存它。
class ILProjectForm(forms.ModelForm):
class Meta:
models = ILProject
fields = '__all__'
def clean_keywords(self):
k = self.cleaned_data.get('keywords')
if k:
k = ','.join([a.strip() for a in re.sub('\\s+', ' ', k).strip().split(',')])
return k
但是,当我在管理页面中使用 list_editable 选项时,我不确定如何运行 clean() 来更新数据。
我尝试了类似这样的操作,但收到一条错误消息,提示我无法设置属性。数据清理后更新数据的正确方法是什么?
class MyAdminFormSet(BaseModelFormSet):
def clean(self):
print(type(self.cleaned_data))
recs = []
for r in self.cleaned_data:
if r['keywords']:
r['keywords'] = ','.join([a.strip() for a in re.sub('\\s+', ' ', r['keywords']).strip().split(',')])
print(r['keywords'])
recs.append(r)
self.cleaned_data = recs <-- this part is problematic.
class ILProjectAdmin(...)
...
def get_changelist_formset(self, request, **kwargs):
kwargs['formset'] = MyAdminFormSet
return super().get_changelist_formset(request, **kwargs)
【问题讨论】:
-
我建议重用
ILProjectForm而不是在表单集中复制逻辑。
标签: django