Как показать дополнительное поле Dynami c вместе со всеми полями модели внутри StackedInline Django - PullRequest
0 голосов
/ 07 августа 2020

Я хочу отобразить динамическую c ссылку внутри StackedInline класса администратора. Как я могу это сделать, если поле Dynami c не является частью модели.

Это мой код -

class HistoryInline(admin.StackedInline):
    verbose_name_plural = 'History'
    model = Import
    fields = ('link',)
    extra = 0
    readonly_fields = ['link']

    def link(self, obj):
        url = ...
        return mark_safe("<a href='%s'>click here</a>" % url)


class CatalogAdmin(admin.ModelAdmin):
    list_display = ('__str__', 'created_at', 'updated_at')
    inlines = [ImportInline, HistoryInline]
    exclude = ('app')

Получить ошибку: Unknown field(s) (link) specified for Catalog

Я попытался добавить имя функции внутри fields, но это не сработало. Также пробовал list_display, но, похоже, он недоступен для StackedInline

Как я могу сделать так, чтобы он показывал мне все поля модели, а также дополнительную ссылку c Dynami?

1 Ответ

0 голосов
/ 07 августа 2020

@ SK, вы также можете попробовать добавить поле как метод к модели и реализовать его таким образом.

Например:

class SomeModel(model.models)
    name = models.CharField
    age = models.Int

    def colored_name(self):
            return format_html(
                '<span style="color: #{};">{} {}</span>',
                self.color_code,
                self.first_name,
                self.last_name,
             )

class PersonAdmin(admin.ModelAdmin):
    list_display = ('name', 'age', 'colored_name')

документы здесь: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django .contrib.admin.ModelAdmin.list_display

вы также можете изменить mark_safe на format_ html

Если указанная строка это метод модели, ModelAdmin или вызываемый, Django будет HTML -экранировать вывод по умолчанию. Чтобы избежать ввода пользователем и разрешить использование собственных тегов без экранирования, используйте format_ html ().

...