Erreur d'assertion à: Django-rest-Framework
Je suis à l'aide de python 3.4, Django 1.7.1 (la version considérée dans le livre), Postgresql 9.3 et mon IDE Eclipse.
J'ai étudié le livre "Léger Django - Elman et de Lavin" et j'ai été coincé pendant des jours dans les chapitres 4 et 5, où l'on est censé utiliser le reste, cadre et backbone.js. Voir, par exemple,
Léger Django - Chapitres 4 et 5
Il y a quelques jours, j'ai essayé de code par myseld tel que présenté dans le livre et aussi de vérifier avec les exemples présentés dans le lien ci-dessus. Cependant, depuis que je n'était pas aller de l'avant, j'ai décidé de copier le code présenté dans le lien ci-dessus et a essayé de courir. La même erreur est apparue:
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:
Champ relationnel doit fournir un queryset
argument, ou un ensemble 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']
Cette erreur survient à l'intérieur "relations.py qui appartient à la django-repos-cadre. Depuis que je suis en utilisant le code exact présenté dans le lien ci-dessus, il est supposé ne pas avoir d'erreurs. En fait, le seul morceau de code que j'ai modifié a été dans le settings.py (après que l'erreur s'est produit plusieurs fois):
Avant:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'scrum',
}
}
Maintenant:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'scrum',
'USER': 'daniel',
'PASSWORD': '12345',
'HOST': '127.0.0.1',
'PORT': '5432',
}
Comme vous pouvez le voir ci-dessous, mon utilisateur "daniel" a les attributs suivants:
Role name | Attributes | Member of | Description
-----------+------------------------------------------------+-----------+-------------
daniel | Superuser, Create DB | {} |
postgres | Superuser, Create role, Create DB, Replication | {} |
Enfin, il semble que je n'ai pas de problème avec l'installation de psycopg2, depuis que j'ai été en mesure de créer "scrum", tel que présenté ci-dessous. En fait, la liste des bases de données de mon système est
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
Quelqu'un peut m'aider à découvrir le problème?
source d'informationauteur DanielTheRocketMan
Vous devez vous connecter pour publier un commentaire.
Lire la DRF docs ici.
Vous êtes simplement en utilisant une version plus récente de la DRF que les auteurs du code utilisé, de sorte que vous aurez besoin d'utiliser une version basse ou de corriger le code.
Dans serializers.py il y a cette ligne:
Vous devez ajouter
read_only=True
ouqueryset=User.objects.all()