Django REST API列表视图
目前我正在尝试用Django/RESTAPI开发个人博客,但我遇到了麻烦 博客中有很多帖子,我想用超链接控制这些帖子。我是通过使用ModelViewSet实现的,然而,detailView中的全部数据也显示在ListView中 问题是,我只希望在ListView中显示帖子的url和标题,而DetailView包含完整的数据。 下面是我的代码和REST框架给出的当前结果。 不介意索引查看Django REST API列表视图,django,rest,web,Django,Rest,Web,目前我正在尝试用Django/RESTAPI开发个人博客,但我遇到了麻烦 博客中有很多帖子,我想用超链接控制这些帖子。我是通过使用ModelViewSet实现的,然而,detailView中的全部数据也显示在ListView中 问题是,我只希望在ListView中显示帖子的url和标题,而DetailView包含完整的数据。 下面是我的代码和REST框架给出的当前结果。 不介意索引查看 # serializers class PostSerializer(serializers.Hyperlin
# serializers
class PostSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Post
fields = '__all__'
# views
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = serializers.PostSerializer
permission_classes = (IsAdminUser, )
REST API中的Post列表:
REST API中的Post实例:
据我所知,列表视图需要一个单独的序列化程序 您可以创建一个自定义序列化程序,该序列化程序接受字段arg以选择特定字段。但是,为ListView单独设置一个可能更简单。此外,对于列表视图,如果仅显示模型字段的子集,则可以使用queryset上的only函数仅返回所需的模型数据。例如: qs=MyModel.objects.all.only'field\u a'、'field\u b'、'field\u c' 如果您决定这样做,以下是自定义序列化程序:
class CustomSerializer(serializers.ModelSerializer):
def __init__(self, *args, **kwargs):
selected_fields = kwargs.pop('selected_fields', None)
# used pop function so selected_fields is not passed to superclass
super().__init__(*args, **kwargs)
if selected_fields:
# make sure only fields for the model are allowed
fields = set(selected_fields)
current_fields = set(self.fields.keys())
for field in current_fields - fields:
self.fields.pop(field)
class MyModelSerializer(CustomSerializer):
class Meta:
model = MyModel
fields = '__all__'
在列表视图中:
required_fields = ('field_a', 'field_b', 'field_c')
data_to_return = MyModelSerializer(model_queryset, many=True, fields=required_fields).data
return Response(data)
不要将代码作为图像发布