首页 文章

Django auth.models.User查询全名但中文名称

提问于
浏览
2

在中文中,名称格式为 'LastnameFirstname' (姓氏和名字的字符数各不相同),而在英语中,它是 'Firstname LastName' . 我们可以看到,在中文中,名字的姓氏是交换的(这里的查询不是问题),并且名字姓不是由空格分隔的(这导致了我的这个问题) .

在SQL中,我们可以这样做:

SELECT * 
FROM   USER 
WHERE  Concat(last_name, first_name) = 'LastnameFirstName';

但是我怎么能在Django中这样做呢?将FULLNAME字符串指定为“LastnameFirstname”,我该怎么做:

User.objects.filter(last_name+firstname=FULLNAME)

另一个solution是创建自定义用户模型并创建一个名为"full name"的新字段,但此解决方案禁止我使用其他django内置函数:

class User( models.Model ):
    first_name = models.CharField( max_length=64 )
    last_name = models.CharField( max_length=64 )
    full_name = models.CharField( max_length=128 )
    def save( self, *args, **kw ):
        self.full_name = '{0}{1}'.format( first_name, last_name )
        super( User, self ).save( *args, **kw )

我想会有更好的解决方案 .

谢谢 . :)

1 回答

  • 0

    您可以链接到 User 模型并创建自己的类:

    class UserProfile(models.Model):
        user = models.OneToOneField(settings.AUTH_USER_MODEL)
    
        def full_name(self):
            return self.user.last_name + self.user.first_name
        ....
    

    或者你可以继承 AbstractUser 模型来定义你自己的自定义用户属性:

    from django.contrib.auth.models import AbstractUser
    
    class MyUser(AbstractUser):
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
    
        def full_name(self):
            return self.last_name + self.first_name
    

    然后在您的设置中将默认用户模型设置为新类:

    AUTH_USER_MODEL = 'myapp.MyUser'
    

    AbstractUser 模型只有3个属性: passwordlast_loginis_active . 您可以自己定义其余部分 .

相关问题