Как получить форму изменения администратора django для предварительного выбора поля выбора? - PullRequest
1 голос
/ 20 марта 2019

У меня есть поле модели с вариантами выбора, как определено здесь:

class Pack(models.Model):
    SIZE_10x20 = Decimal(200.000)
    SIZE_10x10 = Decimal(100.000)
    SIZE_5x10 = Decimal(50.000)

    size_code_choices = (
        (SIZE_5x10, '5x10'),
        (SIZE_10x10, '10x10'),
        (SIZE_10x20, '10x20'),
    )
    size_code = models.DecimalField(max_digits=7,
                                    decimal_places=3,
                                    choices=size_code_choices,
                                    default=SIZE_10x20)

Мой admin.py использует формы по умолчанию:

class PackAdmin(admin.ModelAdmin):
    list_display = ('size_code')
    fields = ('size_code')

admin.site.register(Pack, PackAdmin)

Однако, когда я открываю своего администраторана панели и проверьте форму изменения экземпляра модели, в раскрывающемся меню не задан выбор, сохраненный в базе данных.Я приложил два изображения, чтобы продемонстрировать, что я имею в виду:

Отображение списка для всех экземпляров модели

Изменить форму модели

Он просто выбирает тот, что вверху списка.Я бы хотел, чтобы пользователи могли вносить небольшие изменения в модель, не проверяя и не сбрасывая это поле каждый раз, когда эта форма используется.

Я изучил переопределение ModelAdmin.get_changeform_initial_data (request), но небезрезультатно.

У меня есть аналогичный выбор для модели CharField, и у меня нет с этим проблемы.Что-то происходит с DecimalField, о котором я не знаю?

1 Ответ

0 голосов
/ 20 марта 2019

Вам необходимо создать форму для вашей модели, настройки начальных значений:

см. https://docs.djangoproject.com/en/2.1/ref/forms/fields/#initial

Затем замените форму на вашем админе:

см. https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form

...