【问题标题】:Django: "Can't convert 'Name' object to str implicitly" on saving objectDjango:“无法将'Name'对象隐式转换为str”保存对象
【发布时间】:2014-05-18 11:35:55
【问题描述】:

在 Django admin 中,我创建了一个名称对象,名称为:“United Kingdom”。然后,我使用刚刚创建的 Name 对象和标志图像的路径创建一个 Nation 对象。

保存条目时,我得到:

/admin/display/nation/add/ 处的类型错误

Can't convert 'Name' object to str implicitly
Request Method: POST
Request URL:    http://127.0.0.1:8000/admin/display/nation/add/
Django Version: 1.6.2
Exception Type: TypeError
Exception Value:    Can't convert 'Name' object to str implicitly
Exception Location: \models.py in __unicode__, line 24

models.py 的相关部分

class Name(models.Model):
    def __unicode__(self):
        return 'Name: ' + self.name
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    class Meta:
        db_table = 'name'

class Nation(models.Model):
    def __unicode__(self):
        return 'Nation: ' + self.name
    id = models.AutoField(primary_key=True)
    name = models.ForeignKey(Name)
    flag_path = models.CharField(max_length=64)
    class Meta:
        db_table = 'nation'

从错误消息中,我了解到return 'Name: ' + self.name 需要返回一个字符串以附加到“名称:”,但我将如何修改我的 models.py 以允许这样做?

【问题讨论】:

  • return 'Name: ' + self.name.name 呢?
  • return 'Name: ' + str(self.name) ??
  • pNre,这似乎符合我最想做的事情,并且有效。您可以将其添加为答案以便我接受吗?

标签: python django postgresql typeerror psycopg2


【解决方案1】:

解决问题的更改:

'姓名:' + self.name.name

这样我正确地引用了名称表中的名称列。

【讨论】:

    【解决方案2】:

    __unicode__() 方法中使用unicode,即

    u'Name: ' + self.name
    

    u'Nation: ' + self.name
    

    如果'Nation: ' + self.name 中没有 unicode,它将尝试获取未为 Name 对象定义的 string 表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2017-08-31
      • 2012-11-19
      • 2015-12-10
      • 2014-08-03
      • 2017-08-24
      • 2015-12-23
      相关资源
      最近更新 更多