LINUX.ORG.RU

Django админка

 ,


0

2

У меня есть две модели.

class MetaFile(models.Model):
...
bad = models.BooleanField(default=False)

и

class File(models.Model):
name = models.CharField(max_length=100)
meta = models.ForeignKey(MetaFile)

Подскажите, как в админке, добавить в list_display для File значение столбца bad?

★★★

В классе который ModelAdmin, добавь функцию типа.

class FileAdmin(admin.ModelAdmin):
    list_display = ('get_bad')
    def get_bad(self, obj):
        return obj.meta.bad
    get_bad.short_description = 'Bad'
pawnhearts ★★★★★
()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

И второй вопрос, в догонку. Как сделать это поле редактируемым?

Просто добавить list_editable = ( 'get_bad', ) в ModelAdmin, не работает

trofk ★★★
() автор топика

Либо в класс File добавь функциюметод для получения значения, а еего название уже в list_display.

FIL ★★★★
()
Последнее исправление: FIL (всего исправлений: 2)
Ответ на: комментарий от trofk

АФАИК без всяких адских ухищрений так нельзя сделать(типа кастомного яваскрипта/шаблона и admin action)

pawnhearts ★★★★★
()
Ответ на: комментарий от trofk

И второй вопрос, в догонку. Как сделать это поле редактируемым?

Навскидку как-то так:

class MetaFileInline(admin.TabularInline)
    model = MetaFile
    fields = ("bad", )

и в class FileAdmin добавляешь -

inlines = [MetaFileInline, ]

pi11 ★★★★★
()
Последнее исправление: pi11 (всего исправлений: 1)
Ответ на: комментарий от pi11

Как мы поняли, он хочет чтобы оно редактировалось в «списке». И как сказали выше, и мне так кажется тоже, что без адовых костылей этого не сделать.

FIL ★★★★
()
Ответ на: комментарий от FIL

Именно. Я решил эту проблему изменением модели. Перенес колонку bad в модель File

trofk ★★★
() автор топика
Ответ на: комментарий от FIL

Ну можно было django actions сделать. Сделать actions типа - enable, disable, reverse для изменения поля bad.

pi11 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.