Как заставить администратора Django обновлять имя файла
Мой django сервер использует дату создания файла в качестве имени файла в админке. Файлы добавляются как программно, так и пользователем. В последнем случае мой django сервер всегда использует временную метку запуска сервера. Как я могу изменить это, чтобы использовать временную метку создания файла?
admin.py
from django.contrib import admin
from .models import SyncScriptLog
from django.core.management import call_command
class SyncScriptLogAdmin(admin.ModelAdmin):
actions = ['make_sync']
def make_sync(self, request, queryset):
call_command('update_rdf_from_api', "90", int(request.POST['_selected_action']))
messages.add_message(
request, messages.INFO, 'Amazing synchronization from multiple API sources to RDF TripleStore is DONE!')
make_sync.short_description = "Run Sync from API to RDF"
make_sync.acts_on_all = True
admin.site.register(SyncScriptLog, SyncScriptLogAdmin)
models.py
from django.db import models
from datetime import datetime
class SyncScriptLog(models.Model):
title = models.CharField(max_length=20, default=datetime.now().strftime("%Y-%m-%d %H:%M:%S"), editable=False)
content = models.TextField()
def __str__(self):
return self.title
class SyncScriptLogAdmin(admin.ModelAdmin):
list_display = ('get_title',)
def get_title(self, obj):
return obj.title
actions = ['make_sync']
def make_sync(self, request, queryset):
call_command('update_rdf_from_api', "90", int(request.POST['_selected_action']))
messages.add_message(
request, messages.INFO, 'Amazing synchronization from multiple API sources to RDF TripleStore is DONE!')
make_sync.short_description = "Run Sync from API to RDF"
make_sync.acts_on_all = True
admin.site.register(SyncScriptLog, SyncScriptLogAdmin)
Вы не должны устанавливать default=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
, так как это приведет к оценке выражения, когда он интерпретирует файл в первый раз, а затем продолжит использовать это значение по умолчанию.
Вы можете передать callable параметру default=…
[Django-doc], и пусть он возвращает значение, так:
from django.db import models
from django.utils.timezone import now
def generate_title():
return now().strftime('%Y-%m-%d %H:%M:%S')
class SyncScriptLog(models.Model):
title = models.CharField(max_length=20, default=generate_title, editable=False)
# …