rab*_*bid 2 django admin django-admin
我有一个模型Post,其数据我想在模型Favorite的管理员中显示.
发布模型:
class Post(models.Model):
nickname = models.CharField(max_length=50, default="anonymous")
def __unicode__(self):
return self.id
Run Code Online (Sandbox Code Playgroud)
喜欢的型号:
class Favorite(models.Model):
user = models.ForeignKey(User, unique=False)
post = models.ForeignKey(Post, unique=False)
def __unicode__(self):
return self.user.username
def get_post_nickname(self):
return self.post.nickname
Run Code Online (Sandbox Code Playgroud)
最爱的管理员
class FavoriteAdmin(admin.ModelAdmin):
#fields = ('user', 'get_post_nickname')
list_display= ('user', 'post')
def save_model(self, request, obj, form, change):
obj.save()
admin.site.register(Favorite, FavoriteAdmin)
Run Code Online (Sandbox Code Playgroud)
如果我这样使用代码,当我尝试通过其管理员添加收藏夹时,我收到以下错误:
渲染时捕获TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int
好吧所以它不喜欢显示一个整数,所以我想我只会显示昵称,因为它是一个Charfield.我取消注释了FavoriteAdmin()中的第一行以调用FavoriteModel.get_post_nickname().现在我收到以下错误:
'FavoriteAdmin.fields'指的是表单中缺少的字段'get_post'.
我如何解决#1和#2?是不是可以在fields()中调用方法?我以为它会因为list_display()接受一个方法.
我经常这样做:
class Post(models.Model):
nickname = models.CharField(max_length=50, default="anonymous")
def __unicode__(self):
return u"%s" % self.id
Run Code Online (Sandbox Code Playgroud)Fields(docs)是如何控制admin"添加"和"更改"页面的布局.如果能够在不仅仅显示的字段列表中包含方法,那将是没有意义的.因此list_display允许您包含方法.