2016-12-20 3 views
2

Django 1.8. У меня есть модель:Django admin поля полей атрибутов переопределяют

class Location(models.Model): 
    address = models.CharField(max_length=65) 
    annotation = models.CharField(
     max_length=80, verbose_name='Additional info', blank=True, null=True, 
     help_text='e.g. officce 412, 4 floor') 

И у меня есть задача, чтобы расширить поле ввода формы немного для Location в admin.py. Я сделал это с помощью:

class LocationAdminForm(forms.ModelForm): 
    annotation = forms.CharField(
     widget=forms.widgets.TextInput(attrs={'size': 70})) 

и здесь я потерял verboose_name, blank=True и help_text в виде администратора. Я могу исправить эту проблему:

class LocationAdminForm(forms.ModelForm): 
    annotation = forms.CharField(
     required=not Location._meta.get_field('annotation').blank, 
     label=Location._meta.get_field('annotation').verbose_name, 
     help_text=Location._meta.get_field('annotation').help_text, 
     widget=forms.widgets.TextInput(attrs={'size': 70})) 

, но этот вариант выглядит так некрасиво ... Есть ли какие-либо другие варианты здесь?

+0

Вы могли бы написать функцию-обертку, возвращающий поля, которые вы хотите. Например: http://stackoverflow.com/questions/3647805/get-models-fields-in-django – steph

+0

согласен - это не приятно, но я оставил его в своем коде, это только поле в форме :) –

+0

@steph обертка может быть вариантом, спасибо. – valex

ответ

1

Я настоятельно рекомендую, чтобы изменить CSS для этого администратора модели вместо изменения формы/поля, см ModelAdmin asset definitions:

class LocationAdmin(admin.ModelAdmin): 
    class Media: 
     css = { 
      "all": ("location_admin.css",) 
     } 

myapp/static/location_admin.css:

#id_annotation { width: 423px } 
+0

благодарим вас за эту возможность. Это может быть хорошей идеей. – valex

Смежные вопросы