Было бы вероятно лучше создать пользовательское хранилище .
Если вы хотите переопределить функцию сохраненияадминистратора , тогда вы должны переопределить save_model () :
def save_model(self, request, obj, form, change):
"""
Given a model instance save it to the database.
"""
# your custom stuff here, this is the file path, change "upload_field_name"
# by your actual FileField name
obj.upload_field_name.path
obj.save()
Этот код взят из django/contrib/admin/options.py
, который представляет множество методов, которые вы можете переопределить .
Или вы можете подключить функцию к сигналу pre_save следующим образом:
from django.db.models import signals
def encode_upload(sender, instance=None, created=None, **kwargs):
# your custom stuff here, this is the file path, change "upload_field_name"
# by your actual FileField name
instance.upload_field_name.path
# change YourModelClass by the name of your actual model class
signals.pre_save.connect(encode_upload, sender=YourModelClass)
Это приведет к вызову encode_upload
до экземпляр YourModelClass сохраняется.Будь то в админке, в других представлениях везде, где save () называется .
Обратите внимание, что слот (функция / * 1037)* callback подключиться к сигналу) должен быть подключен при запуске сайта .Используйте его, например, в models.py
.
Узнайте подробнее о сигналах .