我在Django中有以下模型,我正在尝试执行一个过滤器,以便只有一个外键值作为结果集的一部分返回。
class Document(models.Model):
name = models.CharField(...)
version = models.ForeignKey(Version)
class Version(models.Model):
num = models.IntegerField()
我的序列化器看起来像这样。
class VersionSerializer(serializers.ModelSerializer):
class Meta:
model = Version
fields = (...)
class DocumentVersionSerializer(serializers.ModelSerializer):
version = VersionSerializer(source='version_set', many=True, read_only=True)
class Meta:
model = Document
fields = (...)
My RetrieveAPIView看起来像这样:
class Search(ListAPIView):
queryset = Document.objects.all().distinct()
serializer_class = DocumentVersionSerializer
def filter_queryset(self, queryset):
queryset = super(Search, self).filter_queryset(queryset)
queryset.filter(version__num=self.kwargs.get('version_num))
return queryset
我所需要的是以下内容,一个带有1个版本的Document对象,该对象被设置为URL的一部分。因此,URL可能类似于:/api/document/version/1.1/
json会是这样的:
{
"name": "test document",
"version": {
"num": "1.1",
},
}
但我明白了:
{
"name": "test document",
"version": [
{
"num": "1.1",
},
{
"num": "1.2",
},
]
}
我遇到的问题是json响应中会出现多个版本号。如何限制返回的回复数量。
答案 0 :(得分:0)
我认为你可以使用serializers.SerializerMethodField()
来做到这一点class VersionSerializer(serializers.ModelSerializer):
class Meta:
model = Version
fields = (...)
class DocumentVersionSerializer(serializers.ModelSerializer):
version = serializers.SerializerMethodField()
def get_version(self, Document):
#select the one version that you want through queryset
#and then serialize it with your VersionSerializer.
class Meta:
model = Document
fields = (...)
不要忘记在字段中列出“版本”。 您可以在此处找到此方法的文档:http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield