重写默认用户模型方法

3 投票
1 回答
2123 浏览
提问于 2025-04-15 16:30

我一直在尝试重写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"

但都不行,我知道这样做是错的,但我不知道该怎么正确地做。

我只想在管理面板里显示“pie”而不是用户名。

编辑:

我终于这样做成功了:

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

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

在创建外键引用时,我用了MyUser类,而不是User。

1 个回答

4

你可以看看Django中的代理模型的概念。他们甚至提供了一个使用用户作为基础类的例子。

另一方面,如果你想要修改实际的__unicode__()方法,也就是用户类里面的那个方法,你可能需要猴子补丁。这并不难,但具体怎么做我就不多说了,留给你自己去学习吧。

撰写回答