django-repos-cadre: mise en place de processus pour les clés étrangères
Dans mon modèle, j'ai deux tables: Vtable
et Vdata
. Chaque table virtuelle (dans Vtable
) possède des entrées de données virtuelles stockées dans Vdata
.
Je suis en train de faire une vue de faire apparaître la liste de Vdata
correspondant à chaque Vtable
Mon sérialiseur ne fonctionne pas et je pense que c'est parce que je suis en train de faire à l'envers.
Je pense que le problème est dans cette ligne:
table_id = serializers.RelatedField(many=True)
Pour la référence, j'obtiens cette erreur: 'Vtable' object is not iterable
Voici mon models.py:
from django.db import models
from django.contrib.auth.models import User
class Vtable(models.Model):
user = models.ForeignKey(User)
table_name = models.CharField(max_length=200)
added_date = models.DateTimeField('date added')
def __unicode__(self):
return self.table_name
class Vdata(models.Model):
table_id = models.ForeignKey(Vtable)
table_pk = models.IntegerField()
column_1 = models.CharField(max_length=200)
column_2 = models.CharField(max_length=200)
added_date = models.DateTimeField('date added')
def __unicode__(self):
return str(self.added_date)
Voici mon serializers.py:
from django.contrib.auth.models import User, Group
from rest_framework import serializers
from vtables.models import Vtable, Vdata
class TableSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.Field(source='user.username')
class Meta:
model = Vtable
fields = ('table_name', 'added_date', 'user')
class EntrySerializer(serializers.HyperlinkedModelSerializer):
table_id = serializers.RelatedField(many=True)
class Meta:
model = Vdata
fields = ('table_id', 'table_pk', 'column_1', 'column_2', 'added_date')
Ici est la vue qui l'appelle:
class EntryList(APIView):
def get(self, request, format=None):
entries = Vdata.objects.all()
serializer = EntrySerializer(entries, many=True)
return Response(serializer.data
class Meta:
model = Vdata
fields = ('table_id', 'table_pk', 'column_1', 'column_2', 'added_date')
OriginalL'auteur adrianmc | 2014-08-08
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de comment vous pourriez faire ceci:
Et pour la vue:
Ne pas oublier:
réglage
related_name='entries'
dans votre modèle de champ de clé étrangère de la définition.'Vtable' object has no attribute 'entries'
quand je fais çaOui, j'ai oublié: vous devez avoir related_name='entrées' lorsque vous déclarez le ForeingKey de Table sur votre modèle d'Entrée de gamme. Donc: table_id = modèles.ForeignKey(Vtable, related_name=entrées)
[{"event":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]},{"event":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]},{"event":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},]}]
J'ai suivi votre exemple, et toutes les valeurs sont récupérées mais renvoie aussi vide d'ensembles. Comme ci-dessus, quelle est mon erreur
Je ne peux pas dire tout simplement par la sortie. Peut-être vous avez raté quelque chose ou peut-être vous utilisez une version différente de la DRF où ce morceau de code ne fonctionne plus comme prévu. Gardez à l'esprit que cette réponse est à partir de 2014, il est possible que les fonctionnalités de la DRF ont un peu changé.
OriginalL'auteur AdelaN