通过django管理界面添加模型实例后生成文件
我正在为一个网站写一个模型。当用户通过Django管理员添加模型实例时,我希望捕获事件并自动生成文件,包括为创建的文件添加引用路径字段 模型表单(用于管理站点)有一个可以重写的方法。我可以通过它创建和更新文件和字段通过django管理界面添加模型实例后生成文件,django,python-3.x,django-models,django-admin,Django,Python 3.x,Django Models,Django Admin,我正在为一个网站写一个模型。当用户通过Django管理员添加模型实例时,我希望捕获事件并自动生成文件,包括为创建的文件添加引用路径字段 模型表单(用于管理站点)有一个可以重写的方法。我可以通过它创建和更新文件和字段 def clean(self): info = self.cleaned_data.get('info') ... #Generate IO paths from info self.cleaned_data['template_path'] = temp
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
中执行此操作,或者我应该在其他地方创建字段和更新字段 清理模型表单并不一定意味着将保存模型实例
您可以在模型的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以下是如何在自定义save()方法中区分新对象和现有对象:您还可以使用instance保存数据库查询。\u state。请参阅问题中@Endre tware的评论。我通过save方法实现了这一点。更好的工作流,但我必须确保在条件检查和更新自定义字段后调用super().save()。效果很好。