当前位置: 代码迷 >> 综合 >> unable to get repr for <class ‘django.db.models.query.QuerySet
  详细解决方案

unable to get repr for <class ‘django.db.models.query.QuerySet

热度:94   发布时间:2023-12-22 00:36:26.0

用django做一个查询页面,在查询指定category的产品时候,

skus = category.sku_set.filter(is_launched=True).order_by(sort_field)

没查到结果:

skus: Unable to get repr for <class 'django.db.models.query.QuerySet'>

检查了下MySQL数据库是有数据的,代码也是正确的,网络也正常。

解决思路:

根据错误提示,模型类没有响应,那么就是数据库的数据无法通过模型类展现出来,MySQL的数据类型或格式与model应该是不匹配。

MySQL里面的数据是提前检查,导入好的,那么就看model.py文件定义sku这个类有没字段定义错了类型。

default_image_url = models.CharField(max_length=200, default='', null=True, blank=True, verbose_name='默认图片')

对应MySQL表的字段,发现default_image_url这个字段在MySQL表中的字段是default_image。而且商品不仅包含文字信息,也包含图片,明显这个代表图片的字段定义为charfield是错的。于是改为如下:

default_image = models.ImageField(max_length=200, default='', null=True, blank=True, verbose_name='默认图片')

改完在终端进行模型类迁移,输入python manage.py makemigrations和python manage.py migrate.报错了

Running migrations:
  Applying goods.0002_auto_20220220_1055...Traceback (most recent call last):……

pymysql.err.OperationalError: (1091, "Can't DROP 'default_image_url'; check that column/key exists")
django.db.utils.OperationalError: (1091, "Can't DROP 'default_image_url'; check that column/key exists")
解决方法:

打开goods子应用的migrations/0002_auto_20220220_1055迁移文件,注释掉删除、添加字段那一段

class Migration(migrations.Migration):dependencies = [('goods', '0001_initial'),]operations = [# migrations.RemoveField(#     model_name='sku',#     name='default_image_url',# ),# migrations.AddField(#     model_name='sku',#     name='default_image',#     field=models.ImageField(blank=True, default='', max_length=200, null=True, upload_to='', verbose_name='默认图片'),# ),]

因为MySQL表中的字段就是default_image,在数据库中删除name是default_image_url的字段,再添加一个default_image字段,这个操作会找不到default_image_url的,所以会报错。注释后重新运行上面两条迁移指令,成功了。这一次能够拿到查询集数据。

总结:

1.django的文档还是要看的。我一开始纠结default_image改为ImageField,但是MySQL里存的数据是字符串的,不对应啊。后来看文档才知道ImageField是继承自CharField,并多了图片长宽度属性,验证上传的对象是否图像的功能。而且ImageField实例是在数据库创建一个varchar类型的字段,疑惑消除了。

2.学代码要弄懂底层原理,不能只关注如何实现业务逻辑。

  相关解决方案