首页 > 解决方案 > Django:无法访问管理面板中的对象

问题描述

单击 AdminPanel 中的 Object Cart 或 CartItem 时,我得到:

模板渲染期间出错

在模板 D:\virtual_envs\stickers_gallito\lib\site-packages\django\contrib\admin\templates\admin\base.html 中,第 0 行的错误
str返回了非字符串(int 类型)

在 shell 中查询这些对象时,我得到:

>>> carts = Cart.objects.all()
>>> carts
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "D:\virtual_envs\stickers_gallito\lib\site-packages\django\db\models\query.py", line 247, in __repr__
    return '<%s %r>' % (self.__class__.__name__, data)
  File "D:\virtual_envs\stickers_gallito\lib\site-packages\django\db\models\base.py", line 503, in __repr__
    return '<%s: %s>' % (self.__class__.__name__, self)
TypeError: __str__ returned non-string (type int)

模型.py

class Cart(models.Model):
    cart_id = models.CharField(max_length=100)
    date_added = models.DateField(auto_now_add=True)

    class Meta:
        db_table = 'Cart'
        ordering = ['date_added']

    def __str__(self):
        return self.id

有什么问题?

标签: django

解决方案


例外是为您提供有关问题所在的线索:

TypeError:__str__返回非字符串(类型int

您已经定义了一个__str__返回整数 ID 而不是字符串的方法,因此会返回错误。您需要将值强制为字符串:

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

另请注意,这self.id是数据库中自动生成的行 ID,与self.cart_id. 如果您使用后者来识别您的购物车,您可能希望使用后者。


推荐阅读