"__str__ returned non-string (type int)"错误



我有一个Django项目的问题。

我就直说了。我正在连接我的Django admin到我在服务器上的数据库,问题是,当访问浏览器中的模型时,抛出以下错误:

TypeError at /admin/crm/asentamiento/78967/
__str__ returned non-string (type int)
Request Method: GET
Request URL:    http://127.0.0.1:8080/admin/crm/asentamiento/78967/
Django Version: 1.8
Exception Type: TypeError
Exception Value:    
__str__ returned non-string (type int)
Exception Location: C:Spameandocrm_denue2myvenvlibsite-packagesdjangoutilsencoding.py in force_text, line 90
Python Executable:  C:Spameandocrm_denue2myvenvScriptspython3.exe
Python Version: 3.4.4

我的模型的代码是:

class Asentamiento(models.Model):
    id_asentamiento = models.AutoField(primary_key=True)
    nom_asentamiento = models.CharField(max_length=150)
    tipo_centro = models.CharField(max_length=100)
    nom_centro = models.CharField(max_length=100)
    num_local = models.CharField(max_length=20)
    tipo_asentamiento_id_tipo_asent = models.ForeignKey('TipoAsentamiento', db_column='tipo_asentamiento_id_tipo_asent')
    codigo_postal_id_codpostal = models.ForeignKey('CodigoPostal', db_column='codigo_postal_id_codpostal')
    localidad_id_localidad = models.ForeignKey('Localidad', db_column='localidad_id_localidad')
    class Meta:
        managed = False
        db_table = 'asentamiento'
    def __str__(self):
            return self.nom_asentamiento

我不知道问题是什么,因为我已经做了很多次模型,我总是抛出同样的错误,在所有其他表和模型中,我没有问题。

当我点击模型的某个值,在窗口中看到所选值时,发生错误。

str()放在这里:

def __str__(self):
       return str(self.nom_asentamiento)

也许这会有所帮助,我最近遇到了类似的问题:

def __str__(self):
   return 'Asentamiento: {} {} {} {} {} '.format(self.id_asentamiento, self.nom_asentamiento, self.tipo_centro, self.nom_centro, self.num_local)

我希望它对你有用,regards

在这里,由于Asentamiento模型的返回类型,您没有得到此错误。它返回的CharField不是Integer类型(如错误消息中提到的)

错误可能是由于TipoAsentamientoCodigoPostalLocalidad模型的返回类型。由于这些模型与Asentamiento模型具有一对多关系

如果您不确定这些模型的返回类型,那么您需要在模型中添加__str__()方法并返回CharField或任何其他非整数字段。

例如,如果你想返回一个PositiveIntegerField

def __str__(self):
   return str(self.positive_integer_field_name)
# here, you need to use the str() method to convert the return type into a string. 

如果你想返回一个非整数字段,

def __str__(self):
   return self.non_integer_field_name

我有VSCode创建的默认代码,它返回pk

改变
  def __str__(self):
      return self.pk

:

  def __str__(self):
      return self.title # title is the field from my model

对我来说,这是因为我返回的是对象而不是字符串,所以我改变了

 def __str__(self):
    return self.user

 def __str__(self):
    return self.user.email

我只是面对这个问题,我认为如果我们把str()放在self.field之前不会解决我们的问题。即使我在运行迁移命令后注释了__str__方法,我还是一次又一次地面临这个问题。

问题原因:-

主要问题是与此模型有任何关系的其他模型,并且在该模型中,您正在像往常一样使用__str__方法!

您应该检查将str()放在与您的模型有多对一关系的模型之前!

我使用我们想要在管理面板中表示的字段。
将该字段放在字符串表示中,在我的例子中是:

def__str__:
  return self.user.username

如果其中一个外键字段返回models.IntegerField(),则可能出现此问题。这发生在我身上,我必须确保外键也返回models.Charfield()类型。

模型示例:

类测试(models.Model):
jw = models.IntegerField()

def __str__(self):
    return str(self.jw)

最新更新