2014-12-15 9 views
12

Я использую python 3.4, Django 1.7.1 (версия, рассмотренная в книге), Postgres 9.3 и моя IDE - Eclipse.Ошибка утверждения: Django-rest-Framework

Я изучаю книгу «Легкий Джанго - Эльман и Лавин», и я несколько дней простаивал в главах 4 и 5, где мы должны использовать остальные рамки и backbone.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, который относится к Джанго-покой рамке. Поскольку я использую точный код, приведенный в ссылке выше, предполагается, эта ошибка не имеет ошибки. На самом деле, только кусок кода, который я изменил был в 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',   
    } 

Как вы можете видеть ниже, мой пользователь «Даниель» имеет следующие атрибуты:

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

Наконец, кажется, что у меня нет никаких проблем с установкой psycopg2, так как я был способный создать «схватку», как показано ниже. Фактически, список баз данных моей системы:

         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 

Может кто-нибудь помочь мне обнаружить проблему?

ответ

28

Прочтите документы DRF here.

В версии 2.x класс serializer иногда может автоматически определять аргумент запроса, если использовался класс ModelSerializer.

Это поведение теперь заменяется всегда с использованием явного аргумента запроса для записываемых реляционных полей.

Вы используете более новую версию DRF, чем авторы используемого кода, поэтому вам нужно либо использовать более низкую версию, либо исправить код.

В serializers.py есть эта линия:

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

Вам нужно либо добавить read_only=True или queryset=User.objects.all()

+0

Спасибо !!! Я провел дни с этим !! – DanielTheRocketMan

+0

Ссылка для serializers.py дает 404. Не могли бы вы обновить ссылку? Или укажите, какой файл serializers.py это? – tilaprimera

+1

ну, они изменили свои репозитории. Но похоже, что это исправлено. https://github.com/lightweightdjango/examples/blob/chapter-6/scrum/board/serializers.py присвоено = serializers.SlugRelatedField ( slug_field = User.USERNAME_FIELD, required = False, queryset = User.objects. все()) – Aldarund

Смежные вопросы