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

我一直在学习《轻量级Django-Elman和Lavin》一书,我已经在第4章和第5章中呆了好几天,我们应该在这两章中使用rest框架和主干.js.比如说,

Lightweight Django - Chapters 4 and 5

几天前,我试着按照书中的介绍编写myseld的代码,并用上面链接中的示例进行判断.然而,由于我没有继续,我决定复制上面链接中的代码并try 运行.同样的错误也出现了:

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个参数,或设置为只读=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框架.由于我使用的是上面链接中给出的代码,所以应该没有错误.实际上,我唯一更改的代码是settings.py(错误反复发生后):

Before:

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

Now:

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

有人能帮我发现这个问题吗?

推荐答案

阅读DRF文档here.

在版本2中.如果使用ModelSerializer类,序列化程序类有时会自动确定queryset参数.

这种行为现在被替换为始终为可写关系字段使用显式queryset参数.

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

serializers.py中有这样一行:

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

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

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

可以向判断枚举值的SQL列添加约束吗?

为什么Postgres优化器切换到嵌套循环进行连接?

如何在docker-compose中使用docker secrets设置ConnectionString?

错误:分区表的唯一约束必须包括所有分区列

为什么在 PostgreSQL 中忽略查询超时?

PL/pgSQL 中 PL/SQL %ISOPEN 的类似功能是什么?

当我写 SELECT ~1;在 Postgresql 上它给了我 -2 结果.这是什么原因?它一直持续〜4和-5等

如何在 PSQL 中查找从另一个表继承的子表

PostgreSQL 返回准确或最接近查询日期的日期

如何通过我在 PostgreSQL 中的数据库获取列大小和类型

'active' 标志与否?

判断值是否存在于列中

H2 postgresql mode模式似乎不起作用

在 MAC OS X 10.6 for PostgreSQL 上设置 SHMMAX 等值

大型查询后 psycopg2 泄漏内存

如何使用 PostgreSQL 触发器来存储更改(SQL 语句和行更改)

如何从 PostgreSQL 中的 Json 数组中获取元素

如何更改 PostgreSQL 中的日期样式?

基于秒的 Postgresql 日期差异