我正在为网站编写模型。当用户通过Django管理员添加模型的实例时,我想捕获事件并自动生成文件,包括为这些已创建文件添加参考路径字段。
模型表单(用于管理站点)具有clean
方法,该方法可以被覆盖。我可以通过它创建和更新文件和字段。
def clean(self):
info = self.cleaned_data.get('info')
... #Generate IO paths from info
self.cleaned_data['template_path'] = template_path
self.instance.template_path = template_path
return self.cleaned_data
我需要在add
和change
事件之间进行区分,所以我不会写文件,也不会更改路径后对象的创建。是否可以在clean
中进行此操作,还是应该在其他地方创建字段并更新字段?
答案 0 :(得分:1)
清理ModelForm并不一定意味着可以保存Model实例。
您可以在Model的save()方法或pre_save信号中进行确认。
话虽如此,为了区分添加和更改,您可以先在数据库中查询具有相同ID的实例,然后再保存。
if instance.pk and instance.__class__.objects.filter(pk=instance.pk):
# Editing existing instance, skip
pass
else:
# New instance. do whatever you want
在您的情况下,实例变为 self.instance