断言错误:Django-rest-Framework - python

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

我一直在学习《轻量级Django-Elman和Lavin》这本书,而在第4章和第5章中已经停留了几天,在那儿我们应该使用其余框架和ribs.js。例如,

Lightweight Django - Chapters 4 and 5

几天前,我尝试按照书中的myseld进行编码,并且还检查了上面链接中提供的示例。但是,由于我没有继续进行,所以我决定复制上面链接中提供的代码并尝试运行。出现了相同的错误:

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

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

参考方案

阅读DRF文档here。

在2.x版中,如果正在使用ModelSerializer类,则序列化程序类有时可以自动确定queryset参数。
现在,此行为已替换为始终对可写关系字段使用显式queryset参数。

您使用的DRF版本仅比使用代码的作者新版本,因此您需要使用较低版本的DRF或修复代码。
在serializers.py中有这行:

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

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

Django REST Framework中序列化程序验证的顺序 - python

情况在Django REST Framework的ModelSerializer中进行验证时,我注意到Meta.model字段始终经过验证,即使这样做不一定有意义。采取以下示例进行User模型的序列化:我有一个创建用户的端点。因此,存在一个password字段和一个confirm_password字段。如果两个字段不匹配,则无法创建用户。同样,如果请求的us…

Django Rest Framework在ViewSet中覆盖page_size - python

django rest框架分页有问题。我已经在类似-的设置中设置了分页'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 1 以下是我的观点。class HobbyCate…

django-getlist() - python

我刚刚发布了这个问题jQuery - passing arrays in post request,在发布请求中我不发送数组,但是jQuery代码没有问题。问题在于在django中接收到POST请求。我确实喜欢这个def portfolio_add(request): ukeys = request.POST.getlist('ukeys'…

Django HttpResponseRedirect - python

我创建了一个基本的联系表单,当用户提交信息时,它应该重定向到“谢谢”页面。 views.py :def contact(request): # if no errors... return HttpResponseRedirect('/thanks/') urls.py :(r'^contact/$', contact…

django-simple-history,在admin中显示更改的字段 - python

当我从admin.ModelAdmin继承时,在管理页面的历史记录中,我可以看到哪些字段已更改。但是,现在我需要使用django-simple-history来跟踪所有模型更改。现在,对于管理员,我继承了simple_history.SimpleHistoryAdmin。我可以看到所有模型更改并还原它们,但看不到更改了哪些字段。是否可以在SimpleHist…