断言错误:Django-rest-Framework

新手上路,请多包涵

我使用的是 python 3.4、Django 1.7.1(本书中考虑的版本)、Postgres 9.3,我的 IDE 是 Eclipse。

我一直在学习“轻量级 Django - Elman 和 Lavin”这本书,我已经在第 4 章和第 5 章中停留了好几天,我们应该在其中使用 rest 框架和 backbone.js。参见例如,

轻量级 Django - 第 4 章和第 5 章

几天前,我尝试按照书中介绍的方式编写自己的代码,并检查了上面链接中提供的示例。但是,由于我没有继续,我决定复制上面链接中提供的代码并尝试运行。出现了同样的错误:

 AssertionError at /

Relational field must provide a `queryset` argument, or set read_only=`True`.

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Django Version:     1.7.1
Exception Type:     AssertionError
Exception Value:

关系字段必须提供 queryset 参数,或设置 read_only= True

 Exception Location:     /usr/local/lib/python3.4/dist-packages/rest_framework/relations.py in __init__, line 35
Python Executable:  /usr/bin/python3
Python Version:     3.4.0
Python Path:

['/home/daniel/workspace/Scrum',
 '/usr/lib/python3.4',
 '/usr/lib/python3.4/plat-i386-linux-gnu',
 '/usr/lib/python3.4/lib-dynload',
 '/usr/local/lib/python3.4/dist-packages',
 '/usr/lib/python3/dist-packages']

此错误出现在“relations.py”中,它属于 django-rest-framework。由于我使用的是上面链接中提供的确切代码,因此它应该没有错误。实际上,我更改的唯一一段代码在settings.py中(错误反复发生后):

前:

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'scrum',
    }
}

现在:

 DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'scrum',
        'USER': 'daniel',
        'PASSWORD': '12345',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }

如下所示,我的用户“daniel”具有以下属性:

 Role name |                   Attributes                   | Member of | Description
-----------+------------------------------------------------+-----------+-------------
 daniel    | Superuser, Create DB                           | {}        |
 postgres  | Superuser, Create role, Create DB, Replication | {}        |

最后,似乎我对 psycopg2 的安装没有任何问题,因为我能够创建如下所示的“scrum”。事实上,我系统的数据库列表是

                                      List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 scrum     | daniel   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/daniel           +
           |          |          |             |             | daniel=CTc/daniel
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres

有人可以帮我发现问题吗?

原文由 DanielTheRocketMan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 488
1 个回答

此处 阅读 DRF 文档。

在版本 2.x 中,如果使用 ModelSerializer 类,序列化器类有时可以自动确定查询集参数。

此行为现在已替换为始终对可写关系字段使用显式查询集参数。

您只是使用比所用代码作者更新的 DRF 版本,因此您需要使用较低版本或修复代码。

serializers.py 中有这一行:

 assigned = serializers.SlugRelatedField(slug_field=User.USERNAME_FIELD, required=False)

您需要添加 read_only=Truequeryset=User.objects.all()

原文由 Aldarund 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题