【问题标题】:Django __str__ returned non-string (type NoneType)Django __str__ 返回非字符串(NoneType 类型)
【发布时间】:2018-04-17 16:15:42
【问题描述】:

我在编辑 Product 模型对象时收到 __str__ returned non-string (type NoneType) 错误

产品型号

class Product(models.Model):
    ProductName = models.CharField(blank=True, max_length=250)
    Price = models.FloatField(blank=True, default=9.99)
    Tax = models.FloatField(blank=True, null=True, default=0.0)
    StoreId = models.IntegerField(blank=True, null=True)
    RelatedStore = models.ForeignKey(Store, blank=True, null=True)
    Category = models.CharField(max_length=200,
                                blank=True, null=True,
                                default='No Specific Category')
    ProductImage = models.CharField(max_length=400, null=True, blank=True)
    Features = models.TextField(blank=True, null=True)
    ProductSize = models.IntegerField(blank=True, null=True, default=3)
    FavoriteField = models.BooleanField(blank=True, default=False)
    Active = models.BooleanField(blank=True, default=True)

    def __unicode__(self):
        return self.ProductName

    def __str__(self):
        return self.ProductName

任何有用的答案将不胜感激。

【问题讨论】:

  • 在定义字段时不要使用 Pascal 大小写。使用小写或驼峰式
  • 我会说,您的{{ field.field }} 不会调用Product.__str__。后者永远不应该返回None,因为您的模型字段中没有null=True。将import pdb; pdb.set_trace() 添加到您的__str__ 方法中,然后浏览器应该 挂起并且运行runserver 的控制台应该打开一个调试提示,如果 方法被调用- 它非常可能不会
  • 或者,进入./manage.py shell,从 Products.models 中导入产品,找到产品并使用Product.objects.get(pk=400).__str__()显式调用str方法
  • @llja Product.objects.get(pk=400).__str__() 返回异常结果 ProductName
  • 请出示您的RelatedStore 型号和__str__ 方法。由于您使用的是 Python 3,因此您可以删除 __unicode__

标签: django python-3.x django-models


【解决方案1】:

你可以试试:

def __str__(self):
    return str(self.ProductName) if self.ProductName else ''

【讨论】:

    【解决方案2】:

    我有点晚了,但是把return改成如下:

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

    【讨论】:

    • 成功了..!! @Jorge López 这是如何产生差异的,因为 charfield 本身已经是一个字符串,为什么我们需要再次将其转换为字符串
    • 嗨@ivardu,python 抱怨 NoneType 当值为 None 所以为了表示你必须转换为字符串,我不完全确定,但我相信这就是原因。
    【解决方案3】:

    __str__ returned non-string (type NoneType)

    当您正在访问的模型或 与它相关的其他模型 是 / 在 def __str__ 函数上返回 int 值时返回。如果您要返回一个 int,请务必将值解析为 String 选项。

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

    【讨论】:

      【解决方案4】:

      问题出在 Foregienkey 上:

       RelatedStore = models.ForeignKey(Store, blank=True, null=True)
      
      #edit or delete this:
          def __str__(self):
              return self.ProductName
      

      否则检查Store类会有一些

      def_str_(self):
       return self.something 
      

      然后它会正常工作,我知道我迟到了,但这对我有用!

      【讨论】:

        【解决方案5】:

        我找到了解决方案,只要确保表(或模型)不返回并且不包含表/模型返回整数的任何属性(或外键)。 如果要返回主键,可以将其用于这些属性:

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

        在您的情况下,请确保 RelatedStore 类/模型/表返回一个字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          • 2021-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多