2011-04-15 44 views
2

我有一個模型發佈其數據,我想顯示在模型最喜歡的管理員。Django無法以更改形式顯示model.id?

Post模型:

class Post(models.Model): 
    nickname = models.CharField(max_length=50, default="anonymous") 

    def __unicode__(self): 
     return self.id 

最喜愛的模型:

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 

收藏後臺管理:

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) 
  1. 如果我使用的代碼,例如,當我嘗試添加通過其管理員收藏我會得到followi NG錯誤:

    Caught TypeError while rendering: coercing to Unicode: need string or buffer, int found

  2. 行,所以它不喜歡來顯示整數,所以我想我只是顯示自一Charfield的暱稱。我取消了FavoriteAdmin()中的第一行來調用FavoriteModel.get_post_nickname()的註釋。現在,我得到以下錯誤:

'FavoriteAdmin.fields' refers to field 'get_post' that is missing from the form.

我該如何解決既#1和#2?是不是可以在字段()中調用方法?我認爲這是因爲list_display()接受一個方法。

+0

我認爲這裏有一個錯誤。我絕對寫了'2。 OK,所以它不喜歡顯示一個整數,但不知何故數字「2」顯示爲「1」,因此有兩個數字「1」。奇怪的。 – rabbid 2011-04-15 03:06:38

+0

在list_display中,什麼是get_post_id? – 2011-04-15 03:43:46

+0

哎呀抱歉!我已將其更改爲「發佈」,但未正確複製粘貼。我的錯。 – rabbid 2011-04-15 03:53:10

回答

5
  1. 我經常這樣做:

    class Post(models.Model): 
        nickname = models.CharField(max_length=50, default="anonymous") 
    
        def __unicode__(self): 
         return u"%s" % self.id 
    
  2. 場(docs)是如何控制管理佈局 「添加」 和 「改變」 的網頁。如果能夠將方法包含在不僅僅用於顯示的字段列表中,這是沒有意義的。因此list_display允許你包含方法。

+0

謝謝!我想這是有道理的... – rabbid 2011-04-15 07:41:59

1

Python期待unicode字符串,但在這兩種情況下,你都餵它別的東西。

在這兩種情況下一個簡單的強制轉換爲unicode字符串應該解決這個問題。

return unicode(self.id) 

return unicode(self.post.nickname) 

編輯:你實際上並不需要投一部分,對不起。只需將int投射到unicode即可解決這兩個問題。

+0

也應該將默認值更改爲unicode字符串。使它'u'anonymous'' – chandsie 2011-04-15 03:57:58

+0

關於unicode的好處,謝謝。我實際上粘貼了#2的錯誤信息,抱歉。看來我無法調用一個方法作爲fields()的參數? – rabbid 2011-04-15 04:23:27

1

您已更改帖子。 __unicode__()例程返回一個int!

This is not a problem using the defaults.

A few special cases to note about list_display:

If the field is a ForeignKey , Django will display the __unicode__() of the related object.

+0

謝謝你的肛門。是的,我知道我改變了unicode這樣做。我並不認爲Django會被一個整數難倒... – rabbid 2011-04-15 04:19:18

+0

我實際上爲#2粘貼了錯誤的錯誤消息,抱歉。看來我無法調用一個方法作爲fields()的參數? – rabbid 2011-04-15 04:23:52