在我的模型中,我有两个名为:Vtable
和 Vdata
的表。每个虚拟表(在Vtable
中)都有存储在Vdata
中的虚拟数据条目。
我正在尝试创建一个 View 来显示与每个Vtable
对应的Vdata
列表
我的序列化器无法工作,我认为这是因为我正在向后执行。
我认为问题出在这一行:
table_id = serializers.RelatedField(many=True)
作为引用,我收到此错误:“Vtable”对象不可迭代
这是我的 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)
这是我的序列化器.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')
这是调用它的 View :
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')
最佳答案
以下是如何执行此操作的示例:
class TableSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.Field(source='user.username')
entries = EntrySerializer(many=True)
class Meta:
model = Vtable
fields = ('table_name', 'added_date', 'user', 'entries')
class EntrySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Vdata
fields = ('table_id', 'table_pk', 'column_1', 'column_2', 'added_date')
对于 View :
class EntryList(GenericAPIView):
queryset = Vtable.objects.all()
serializer_class = TableSerializer
不要忘记:
在模型外键字段定义中设置lated_name='entries'
。
关于django-rest-framework:设置外键序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202222/