Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Django auth.models.User按全名但不按中文名称查询_Sql_Django - Fatal编程技术网

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

Sql Django auth.models.User按全名但不按中文名称查询,sql,django,Sql,Django,中文名称格式为“Lastname Lastname”(Lastname和Firstname的字符数不同),英文名称格式为“Firstname Lastname”。我们可以看到,在中文中,名字和姓氏是交换的(这在这里的查询中不是问题),名字和姓氏之间没有空格(这导致了这个问题) 在SQL中,我们可以执行以下操作: SELECT * FROM USER WHERE Concat(last_name, first_name) = 'LastnameFirstName'; 但在Django

中文名称格式为“Lastname Lastname”(Lastname和Firstname的字符数不同),英文名称格式为“Firstname Lastname”。我们可以看到,在中文中,名字和姓氏是交换的(这在这里的查询中不是问题),名字和姓氏之间没有空格(这导致了这个问题)

在SQL中,我们可以执行以下操作:

SELECT * 
FROM   USER 
WHERE  Concat(last_name, first_name) = 'LastnameFirstName'; 
但在Django我怎么做?给定一个全名字符串“LastnameFirstname”,我该如何做:

User.objects.filter(last_name+firstname=FULLNAME)
另一种方法是创建自定义用户模型并创建一个名为“全名”的新字段,但此解决方案禁止我使用其他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 )
我想会有更好的解决办法


谢谢。:)

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

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个属性:
密码
上次登录
处于活动状态
。您可以自己定义其余部分