для меня: функция метода и функция одинаковы, если я согласен, что:
Как и в любом фрагменте кода, у вас могут быть объекты, которые вы вставляете, и у вас может быть объект, который получается в результате. При этом они могут изменить состояние объекта, но это не изменит их основное функционирование для меня.
Может быть определение различий в вызове функций объектов или других кодов. Но разве это не для словесных различий, и поэтому люди обмениваются ими? Упомянутый пример вычисления, с которым я был бы осторожен. потому что я нанимаю сотрудников для выполнения моих расчетов:
new Employer().calculateSum( 8, 8 );
Делая это таким образом, я могу рассчитывать на то, что работодатель будет нести ответственность за расчеты. Если он хочет больше денег, я освобождаю его и позволяю функции сборщика мусора избавляться от неиспользованных сотрудников делать все остальное и получать нового сотрудника.
Даже спор о том, что метод является функцией объекта, а функция не связана с вычислениями, мне не поможет. Сам дескриптор функции и в идеале документация функции скажет мне, что ей нужно и что она может вернуть. Все остальное, как манипулирование состоянием какого-либо объекта, не совсем прозрачно для меня. Я ожидаю, что и функции и методы доставят и манипулируют тем, на что они претендуют, без необходимости подробно знать, как они это делают. Даже чисто вычислительная функция может изменить состояние консоли или добавить в файл журнала.
Если я правильно понимаю ваш вопрос, вы хотите добавить свою собственную ссылку в представление списка, и вы хотите эта ссылка указывает на некоторую информационную страницу, которую вы создали.
Для этого создайте функцию, возвращающую 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)
Взгляните на: 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')
, то вы закончите