为什么变量给我一个 TypeError 而函数却没有?
Why does the variable give me a TypeError but the function doesn't?
我正在尝试 运行 以下代码,但“full_name” 给我以下错误。
TypeError:+ 不支持的操作数类型:'CharField' 和 'str'
from django.db import models
class user(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
full_name = first_name + ' ' + last_name
def __str__(self):
return self.full_name
当我将“full_name”从变量更改为函数时,TypeError 消失,我的代码工作正常。
from django.db import models
class user(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
def full_name(self):
return self.first_name + ' ' + self.last_name
def __str__(self):
return self.full_name()
为什么变量给我一个 TypeError 而函数却没有?他们做的不一样吗?
它给出错误,因为full_name实际上是用户class中的一个变量。但是函数正在返回一个字符串。 Class 用户从未真正运行过,所以你不能定义一个不子class django.models.
的变量
class 级别的语句在启动时进行评估。调用方法时评估方法中的语句。
在第一个例子中,表达式在启动时计算;针对 class 属性值。实际上,您正在执行 models.CharField(max_length=200) + ' ' + models.CharField(max_length=200)
,但您不能将 CharField
与字符串连接起来。
在第二个例子中,表达式是在实例上调用方法时执行的;针对两个字段的 values,它们都是字符串。
我正在尝试 运行 以下代码,但“full_name” 给我以下错误。
TypeError:+ 不支持的操作数类型:'CharField' 和 'str'
from django.db import models
class user(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
full_name = first_name + ' ' + last_name
def __str__(self):
return self.full_name
当我将“full_name”从变量更改为函数时,TypeError 消失,我的代码工作正常。
from django.db import models
class user(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
def full_name(self):
return self.first_name + ' ' + self.last_name
def __str__(self):
return self.full_name()
为什么变量给我一个 TypeError 而函数却没有?他们做的不一样吗?
它给出错误,因为full_name实际上是用户class中的一个变量。但是函数正在返回一个字符串。 Class 用户从未真正运行过,所以你不能定义一个不子class django.models.
的变量class 级别的语句在启动时进行评估。调用方法时评估方法中的语句。
在第一个例子中,表达式在启动时计算;针对 class 属性值。实际上,您正在执行 models.CharField(max_length=200) + ' ' + models.CharField(max_length=200)
,但您不能将 CharField
与字符串连接起来。
在第二个例子中,表达式是在实例上调用方法时执行的;针对两个字段的 values,它们都是字符串。