Подтвердить что ты не робот

Django 1.5 admin inline extra

У меня есть несколько моделей с большим количеством строк. Поскольку не все необходимы для каждого объекта, я объявлял встроенную модель с extra = 0, чтобы на встроенной строке появился небольшой add +.

Однако это, похоже, больше не работает в django 1.5. Если установлено значение extra = 0, встроенная строка больше не редактируется.

Есть ли способ получить поведение 1.4 в 1.5?

Пример кода:

class ModelInline(admin.StackedInline):
    model = MyModel
    extra = 0

class OtherModelAdmin(admin.ModelAdmin)
    inlines = [ModelInline]

admin.site.register(OtherModel, OtherModelAdmin)

Изменить (некоторые экраны):

Django 1.4: django 1.4 extra=0

Django 1.5: enter image description here

(Hinzufügen == add)

4b9b3361

Ответ 1

Это уже случается раньше.

The new javascript made this impossible because the "Add Another" button 
was controlled by max_num, and ignored a value of 0.
The javascript ignored a value of 0 because max_num has a default value of 0, 
and all the code using it had taken to equating max_num = 0 with being "off". 
So you can't actually have a maximum of 0. It not possible.

Существует патч, созданный Gabrial Hurley для восстановления желаемого поведения, не нарушая ничего другого. Это уже 3 года назад, и я не знаю, работает ли он еще на Django 1.5. Просто попробуйте:)

https://code.djangoproject.com/attachment/ticket/13023/13023_inlines_patch.diff

Вот билет на ту же ошибку (3 года назад):

https://code.djangoproject.com/ticket/13023

Ответ 2

Я столкнулся с той же проблемой, потому что у меня был статический админ-контент в каталоге, который находился за пределами установки django. Копирование статического содержимого Django 1.5 из django/contrib/admin/static/admin/js/в STATIC_ROOT/admin/js устраняет проблему.

Ответ 3

лучшим решением было бы переопределить метод get_extra самого встроенного. Это работает в Django 1.9, хотя я не могу сказать для более ранних версий