Администратор Django: проблема с отображением модели по умолчанию - PullRequest
1 голос
/ 06 февраля 2011

В моделях django, если у нас есть
def __unicode__(self):, тогда это будет использоваться как то, как вы хотите отобразить модель по умолчанию

Теперь в админке django я хочу иметь кастомизированное поле отображения(показывая этот объект как URL, чтобы можно было перейти к этому объекту), но я не могу изменить метод unicode для его использования для других целей.Что я должен делать?

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Вы можете создать собственный метод для класса администратора


class SomeModelAdmin(admin.ModelAdmin):
    list_display = ('__unicode__', 'active_status')

    def active_status(self, obj):
        if obj.profile.is_active:
            return """One"""
        return """Two"""

    active_status.allow_tags = True
    active_status.description = ""

Это просто очень простой пример, поэтому вы можете поместить свою логику в эту функцию Вы также можете вернуть HTML-код

0 голосов
/ 14 ноября 2015

Я согласен с этими ответами, но на моей машине просто не работает.

Я использовал Python3 и Django1.8, и попробую использовать это.

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)
0 голосов
/ 06 февраля 2011

Не используйте __unicode__ для таких целей, как установка удобного URL.

Это может скрыть имя вашего напечатанного объекта для любых других целей.

Из какого вида вы пытаетесь создать ссылку? Из списка изменений? С точки зрения изменения? С внешнего ключа?

В общем, вы можете просто определить любой метод вашей модели (или ModelAdmin), который возвращает полную HTML-ссылку <a href=, установить allow_tags = True и ссылаться на него в полях администратора.

# models method
def admin_url(self):
    return '<a href="%s">Edit Model</a>' % the_url
admin_url.allow_tags = True


# ModelAdmin method, through ForeignKey
def admin_url(self, obj):
   return '<a href="%s">Edit Model</a>' % obj.foreignkey.url
admin_url.allow_tags = True
...