管理员中Django的外键参考

bry*_*bee 5 django python-3.4

我一直试图在Django管理员中解决这个问题但仍无法找到文档.

在我的models.py中,我有以下代码:

from django.db import models

class Post(models.Model):
  title = models.CharField(max_length=200)
  author = models.ForeignKey('Author', blank=False)

class Author(models.Model):
  first_name = models.CharField('First Name',max_length=50)
  last_name = models.CharField('Last Name', max_length=50, blank=True)
  description = models.CharField(max_length=500, blank=True)

  def __str__(self):
    return (self.first_name + ' ' + self.last_name)
Run Code Online (Sandbox Code Playgroud)

在 django.contrib导入管理员的admin.py中

# Register your models here.
from .models import Author, Post

class PostAdmin(admin.ModelAdmin):
  list_display = ['title', 'author', 'get_author_description']

admin.site.register(Post, PostAdmin)
Run Code Online (Sandbox Code Playgroud)

但是,每次运行服务器时,我都会收到错误消息

<class 'blog.admin.PostAdmin'>: (admin.E108) The value of         
'list_display[2]' refers to 'get_author_description', which is not a 
callable, an attribute of 'PostAdmin', or an attribute or method on 
'blog.Post'.
Run Code Online (Sandbox Code Playgroud)

我一直在阅读很多关于此的文档,但仍无济于事.任何接受者?

最终编辑 我决定保留最初的帖子.最终的解决方案只涉及改变PostAdmin.

class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'author', 'author_description',]

    def author_description(self, obj):
        return obj.author.description
        author_description.short_description = 'The Author Description'
Run Code Online (Sandbox Code Playgroud)

需要注意的关键事项是:

  • 该方法author_description需要与类相同的缩进.此外,它需要返回,obj.author.description因为我们指的是作者对象.get_author_description根本不需要(你可以说这是一个分心).

Wto*_*wer 9

您可以在admin类中使用自定义方法:

class PostAdmin(admin.ModelAdmin):

    list_display = ['title', 'author', 'author_description']

    def author_description(self, obj):
        return obj.author.get_author_description()
Run Code Online (Sandbox Code Playgroud)

此外,您可以自定义格式化自定义方法中的字段或属性.如果该方法将返回HTML,则可以在该方法之后在类中添加以下内容:

author_description.allow_tags = True
Run Code Online (Sandbox Code Playgroud)

最后,如果您要为此方法添加自定义详细名称:

author_description.short_description = "My awesome name"
Run Code Online (Sandbox Code Playgroud)

  • 发表修改.请阅读并更新您的代码.`author_description`没有正确缩进. (2认同)