Django-администратор: Как отобразить ссылку на страницу информации объекта вместо формы редактирования в списке изменения записей?

для меня: функция метода и функция одинаковы, если я согласен, что:

  • функция может возвращать значение
  • может ожидать параметры

Как и в любом фрагменте кода, у вас могут быть объекты, которые вы вставляете, и у вас может быть объект, который получается в результате. При этом они могут изменить состояние объекта, но это не изменит их основное функционирование для меня.

Может быть определение различий в вызове функций объектов или других кодов. Но разве это не для словесных различий, и поэтому люди обмениваются ими? Упомянутый пример вычисления, с которым я был бы осторожен. потому что я нанимаю сотрудников для выполнения моих расчетов:

new Employer().calculateSum( 8, 8 );

Делая это таким образом, я могу рассчитывать на то, что работодатель будет нести ответственность за расчеты. Если он хочет больше денег, я освобождаю его и позволяю функции сборщика мусора избавляться от неиспользованных сотрудников делать все остальное и получать нового сотрудника.

Даже спор о том, что метод является функцией объекта, а функция не связана с вычислениями, мне не поможет. Сам дескриптор функции и в идеале документация функции скажет мне, что ей нужно и что она может вернуть. Все остальное, как манипулирование состоянием какого-либо объекта, не совсем прозрачно для меня. Я ожидаю, что и функции и методы доставят и манипулируют тем, на что они претендуют, без необходимости подробно знать, как они это делают. Даже чисто вычислительная функция может изменить состояние консоли или добавить в файл журнала.

10
задан RedBlueThing 23 October 2017 в 02:32
поделиться

2 ответа

Если я правильно понимаю ваш вопрос, вы хотите добавить свою собственную ссылку в представление списка, и вы хотите эта ссылка указывает на некоторую информационную страницу, которую вы создали.

Для этого создайте функцию, возвращающую HTML-ссылку в вашем объекте Admin. Затем используйте эту функцию в своем списке. Примерно так:

class ModelAdmin(admin.ModelAdmin):
    def view_link(self):
        return u"<a href='view/%d/'>View</a>" % self.id
    view_link.short_description = ''
    view_link.allow_tags = True
    list_display = ('id', view_link)
23
ответ дан 3 December 2019 в 14:44
поделиться

Взгляните на: http://docs.djangoproject.com/en/dev/ref/contrib/admin/ , часть ModelAdmin.list_display, там говорится: Строка, представляющая атрибут модели. Это ведет себя почти так же, как вызываемый, но self в этом контексте является экземпляром модели. Вот полный пример модели:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

def colored_name(self):
    return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
colored_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')

Итак, я думаю, если вы добавите эти два метода в Person

def get_absolute_url(self):
    return '/profiles/%s/' % (self.id)

def profile_link(self):
    return '<a href="%s">%s</a>' % (self.get_absolute_url(), self.username)
profile_link.allow_tags = True

и измените PersonAdmin на

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name', 'profile_link')

, то вы закончите

9
ответ дан 3 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: