python - tutorial - projects django
Error de aserción en: Django-rest-Framework (1)
Estoy usando python 3.4, Django 1.7.1 (la versión considerada en el libro), Postgres 9.3 y mi IDE es Eclipse.
He estado estudiando el libro "Lightweight Django - Elman and Lavin" y me he quedado atascado durante días en los capítulos 4 y 5, donde se supone que debemos usar el marco de trabajo del resto y el backbone.js. Ver por ejemplo,
Django ligero - Capítulos 4 y 5
Hace algunos días, intenté codificar por mí mismo tal como se presenta en el libro y también verificando los ejemplos presentados en el enlace anterior. Sin embargo, como no estaba avanzando, decidí copiar el código presentado en el enlace anterior e intenté ejecutarlo. Ha surgido el mismo error:
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:
El campo relacional debe proporcionar un argumento queryset
, o establecer 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'']
Este error surge dentro de "relations.py, que pertenece al django-rest-framework. Dado que estoy usando el código exacto presentado en el enlace anterior, se supone que no tiene errores. En realidad, el único fragmento de código que cambié estaba en settings.py (después de que el error ocurriera repetidamente):
Antes de:
DATABASES = {
''default'': {
''ENGINE'': ''django.db.backends.postgresql_psycopg2'',
''NAME'': ''scrum'',
}
}
Ahora:
DATABASES = {
''default'': {
''ENGINE'': ''django.db.backends.postgresql_psycopg2'',
''NAME'': ''scrum'',
''USER'': ''daniel'',
''PASSWORD'': ''12345'',
''HOST'': ''127.0.0.1'',
''PORT'': ''5432'',
}
Como puede ver a continuación, mi usuario "daniel" tiene los siguientes atributos:
Role name | Attributes | Member of | Description
-----------+------------------------------------------------+-----------+-------------
daniel | Superuser, Create DB | {} |
postgres | Superuser, Create role, Create DB, Replication | {} |
Finalmente, parece que no tengo ningún problema con la instalación de psycopg2, ya que pude crear "scrum" como se presenta a continuación. De hecho, la lista de bases de datos de mi sistema es
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
¿Puede alguien ayudarme a descubrir el problema?
Lea los documentos de DRF here .
En la versión 2.x, una clase de serializador a veces podría determinar automáticamente el argumento queryset si se estaba utilizando una clase ModelSerializer.
Este comportamiento ahora se reemplaza utilizando siempre un argumento queryset explícito para campos relacionales de escritura.
Solo está utilizando una versión más reciente de DRF que los autores del código utilizado, por lo que deberá usar una versión inferior o arreglar el código.
En serializers.py hay esta línea:
assigned = serializers.SlugRelatedField(slug_field=User.USERNAME_FIELD, required=False)
read_only=True
agregar read_only=True
o queryset=User.objects.all()