2009-11-30 29 views
3

我一直在試圖覆蓋django.contrib.auth.models用戶模型的默認__unicode__()方法,但我無法讓它工作。覆蓋默認的用戶模型方法

我想它是這樣的:

from django.db import models 
from django.contrib.auth.models import User 

class User(models.Model): 
     def __unicode__(self): 
      return "pie" 

from django.db import models 
from django.contrib.auth.models import User 

class User(User): 
     def __unicode__(self): 
      return "pie" 

,但它不工作,我知道這是錯這樣的,但我不知道如何正確地做到這一點。

我想要做的就是在管理面板中說「餅」而不是用戶名。

編輯:

設法做到這一點是這樣的:

class MyUser(User): 
    class Meta: 
     proxy = True 

    def __unicode__(self): 
     if self.get_full_name() == '': 
      return "pie" 
     else: 
      return self.get_full_name() 

做ForeignKey的引用時,而不是用戶我用了MYUSER類。

+0

很高興爲你工作。我並不想在MonkeyPatching上表現出色,但是如果你打算走上這條路,你就需要做好準備應對各種有趣的問題。特別是你必須做好準備,以便對底層Django核心代碼進行任何更新。 – 2009-11-30 01:31:44

回答

4

你可能想看看Django的Proxy Model的概念。他們甚至展示了一個使用User作爲基類的例子。另一方面,如果您試圖在實際的User類中更改實際的__unicode __()方法,那麼您可能需要MonkeyPatch它。這並不難,但我會留下細節作爲你的學習體驗。

+0

+1用戶代理! – 2010-12-20 11:02:09