Отображение размера файла в админке django - PullRequest
1 голос
/ 16 июня 2011

У меня есть приложение django с моделью для загрузки файлов.Мне нужно показывать разные поля при создании нового объекта и показе существующего.У меня есть следующий класс администратора:

class ResourceAdminForCustomer(ModelAdmin):

    list_display = ["name", "type", "size"]
    list_filter = ['type']

    def get_form(self, request, obj=None, **kwargs):
        if obj:
            self.fields = ("name", "type", "size", "tags")
        else:
            self.fields = ("name", "type", "media", "description", "tags")
        return super(ResourceAdminForCustomer, self).get_form(request, obj, \
                                                              **kwargs)

    def size(self, obj):
        file = '%s/customers/%s/resources/%s' \
             % (settings.MEDIA_ROOT, obj.customer, obj.media.name.split("/")[-1])
        if os.path.exists(file):
            return "%0.1f KB" % (os.path.getsize(file)/(1024.0))
        return "0 MB"

Когда я пытаюсь открыть форму, я получаю:

Caught AttributeError при рендеринге: объект 'NoneType' не имеет атрибута 'label'

Так как я могу вставить функцию size в качестве поля read_only в мои self.fields?

Спасибо.

1 Ответ

1 голос
/ 16 июня 2011

Установите «readonly_fields» в ModelAdmin, чтобы сделать «размер» доступным только для чтения в виде списка и редактирования.

Вы также можете переопределить метод Model_min get_readonly_fields, если хотите установить поля только для чтения в зависимости от запроса и текущего объекта.

Поля только для чтения были добавлены в ModelAdmin в Django 1.2:

https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fields

...