在中文中,名称格式为'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是创建自定义用户模型并创建一个名为“全名”的新字段,但此解决方案禁止我使用其他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 )
我想会有更好的解决方案。
感谢。 :)
答案 0 :(得分: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个属性:password
,last_login
和is_active
。你可以自己定义其余部分。