Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过django管理界面添加模型实例后生成文件_Django_Python 3.x_Django Models_Django Admin - Fatal编程技术网

通过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

我正在为一个网站写一个模型。当用户通过Django管理员添加模型实例时,我希望捕获事件并自动生成文件,包括为创建的文件添加引用路径字段

模型表单(用于管理站点)有一个可以重写的方法。我可以通过它创建和更新文件和字段

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()。效果很好。