изменить значение формы администратора admin

У меня типичное наследование модели в моем проекте:

class A(models.Model): boolean_field = models.BooleanField(default=True) class B(A): some_other_field = models.CharField() 

Я хочу переопределить значение по умолчанию для boolean_field в классе B , как я могу это сделать?

Я думаю, что это может быть сложной задачей на уровне базы данных, поэтому, возможно, по крайней мере, я могу просто переопределить это значение по умолчанию в Django admin (я имею в ModelAdmin форму ModelAdmin для класса B ).

3 Solutions collect form web for “изменить значение формы администратора admin”

Как вы полагаете, я считаю, что самый простой способ – изменить форму модели, используемую для модели B в администраторе django.

Чтобы изменить начальное значение поля формы, вы можете переопределить это поле или переопределить метод __init__ .

 class BForm(forms.ModelForm): # either redefine the boolean field boolean_field = models.BooleanField(initial=False) class Meta: model = B # or override the __init__ method and set initial=False # this is a bit more complicated but less repetitive def __init__(self, *args, **kwargs): super(BForm, self).__init__(*args, **kwargs) self.fields['boolean_field'].initial = False 

Использование вашей пользовательской модели в администраторе django легко!

 class BAdmin(admin.ModelAdmin): form = BForm admin.site.register(B, BAdmin) 
 class A(models.Model): boolean_field = models.BooleanField(default=True) def __unicode__(self): return self. boolean_field class B(): some_other_field = models.CharField() default_fiel_from_bool = models.ForeignKey(A) 

Из этого ответа самый простой способ, который я нашел, – переопределить функцию get_changeform_initial_data.

Вот как я применил его к моему проекту.

В этом примере у меня есть класс ORM под названием Step и класс Admin под названием StepAdmin . Функция get_latest_step_order получает step_order от последнего объекта в таблице.

Переопределяя функцию get_changeform_initial_data в классе admin, я могу установить порядок шагов для каждого нового объекта, созданного на экране администратора.

 class Step(models.Model): step_name = models.CharField(max_length=200) step_status = models.ForeignKey(StepStatus, null=True) step_order = models.IntegerField() def get_latest_step_order(): return Step.objects.latest('step_order').step_order+1 class StepAdmin(admin.ModelAdmin): fields = ["step_name","step_status","step_order"] def get_changeform_initial_data(self, request): return { 'step_order': get_latest_step_order() } 
  • Django: значение внешнего ключа в списке отображения admin
  • Ошибка пользовательской команды Django: непризнанные аргументы
  • Программно добавлять шаблоны URL в Django?
  • django - модель unicode () показать атрибут объекта foreignkey
  • Django 1.7 - обновление base_site.html не работает
  • Проверка зависимых строк в django admin
  • Django InlineModelAdmin - установить встроенное поле из запроса на сохранение (автоматически установить поле пользователя) (save_formset vs save_model)
  • Django: более дружественный заголовок для StackedInline для автоматической сгенерированной модели?
  • Интерфейс администратора Django: использование horizontal_filter с встроенным полем ManyToMany
  • Шаблон Django не найден
  • Как добавить ссылку с страницы администрирования Django одного объекта на страницу администратора связанного объекта?
  • Python - лучший язык программирования в мире.