Django - группировка столбцов в админке django - PullRequest
0 голосов
/ 29 декабря 2011

Мне нужны групповые столбцы в django admin для данной таблицы БД. Я возьму пример таблицы «Студент», в которой есть столбцы id, first_name, last_name, address1, address2, address3. Таким образом, группировка будет выглядеть так:

ID -> id

ИМЯ -> имя, фамилия

АДРЕС -> адрес1, адрес2, адрес3

Цель этого - получить метку для набора столбцов при просмотре строк данных из таблицы. Поэтому, когда я проверяю строки, выбранные для таблицы Student в секции администратора Django, я должен видеть что-то вроде этого:

---------------------------------------------------------------------------------
| ID   | NAME                   | ADDRESS                                       |
---------------------------------------------------------------------------------
| ID   | First Name | Last Name | Address 1       | Address 2       | Address 3 |
---------------------------------------------------------------------------------
| 1    | Ron        | DCunha    | 1st Cross       | Valencia        | Mangalore |
--------------------------------------------------------------------------------|
| 2    | Akash      | Attavar   | Mark Street     | Attavar         | Mangalore |
---------------------------------------------------------------------------------

Я должен быть в состоянии достигнуть этого в admins.py (написав класс, который расширяет admin.ModelAdmin). Используя кортеж list_display, я могу перечислить столбцы, которые я хочу видеть. Но я не знаю, как группировать столбцы. Пожалуйста, помогите мне ...

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Чтобы сделать это, вы просто создаете метод в вашей Model или ModelAdmin, который возвращает соответствующий экран, который вы хотите, а затем используете это имя метода в вашем list_display (для этого нужны имена полей или callables).

class MyModelAdmin(admin.ModelAdmin):
    ...
    list_display = ('id', 'full_name')

    ...

    def full_name(self, obj):
        return u'%s %s' % (obj.first_name, obj.last_name)

ИЛИ в вашем Model (лучше, если отображение полезно в других сценариях, кроме администратора, в противном случае используйте ModelAdmin):

class MyModel(models.Model):
    ...
    def get_full_name(self):
        return u'%s %s' % (self.first_name, self.last_name)

class MyModelAdmin(admin.ModelAdmin):
    ...
    list_display = ('id', 'get_full_name')

Если хотитеДля заказа необходимо определить admin_order_field в методе, но вам нужно будет выбрать одно поле для использования при заказе:

def full_name(self, obj):
    return u'%s %s' % (obj.first_name, obj.last_name)
full_name.admin_order_field = 'last_name'

Если вам нужно включить HTML, укажите allow_tags=Trueпо методу:

def full_name(self, obj):
    return u'%s %s' % (obj.first_name, obj.last_name)
full_name.allow_tags = True

Наконец, Django автоматически создаст метку из имени метода;в этом случае это будет полное имя.Если вы хотите что-то другое, вы можете использовать short_description:

def full_name(self, obj):
    return u'%s %s' % (obj.first_name, obj.last_name)
full_name.short_description = "User's Full Name"
0 голосов
/ 29 декабря 2011

В настоящее время нет способа сгруппировать столбцы точно так, как вы описали в представлении списка в админке.

Ваша альтернатива в достижении почти того же результата - это ответ, который дал вам Крис Пратт.

...