【问题标题】:Why does the variable give me a TypeError but the function doesn't?为什么变量给我一个 TypeError 但函数没有?
【发布时间】:2021-11-16 20:14:28
【问题描述】:

我正在尝试运行以下代码,但“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 而函数却没有?他们不做同样的事情吗?

【问题讨论】:

  • 在你的第一个 sn-p 中你有:'full_name =',你的意思是:'self.full_name ='?

标签: python django typeerror


【解决方案1】:

它给出了错误,因为 full_name 实际上是用户类中的一个变量。但是函数正在返回一个字符串。类用户从未真正运行过,所以你不能定义一个不是 django.models 子类的变量。

【讨论】:

    【解决方案2】:

    类级别的语句在启动时进行评估。方法中的语句在方法被调用时被评估。

    在第一个示例中,表达式在启动时进行评估;针对类属性值。实际上,您正在执行models.CharField(max_length=200) + ' ' + models.CharField(max_length=200),但您不能将CharField 与字符串连接。

    在第二个例子中,表达式是在实例上调用方法时执行的;针对两个字段的,它们都是字符串。

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多