gpt4 book ai didi

django - 在 ModelViewSet 中覆盖 get_queryset 时找不到详细信息

转载 作者:行者123 更新时间:2023-12-04 17:57:25 27 4
gpt4 key购买 nike

我正在覆盖 ModelViewSet 中的 get_queryset 以支持“我”作为过滤器和多个 pk 搜索:

class UserViewSet(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer

def get_queryset(self):
qs = UserProfile.objects.all()

if 'pk' in self.kwargs:
pk_user = self.kwargs['pk']

if ',' in pk_user: # Multiquery
pk_users = pk_user.split(',')
qs = qs.filter(pk__in=pk_users)
elif pk_user == "me":
qs = qs.filter(pk=self.request.user)
else:
qs = qs.filter(pk=pk_user)

# By default return all the items
return qs

我正在使用以下序列化器:

class UserProfileSerializer(serializers.ModelSerializer):
avatar_thumbnail_small = serializers.ImageField(read_only=True)
avatar_thumbnail_medium = serializers.ImageField(read_only=True)

id = serializers.CharField(source='user.id')
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
lastname = serializers.CharField(source='user.last_name')


class Meta:
model = UserProfile
fields = ('id', 'username', 'firstname', 'lastname', 'karma', 'avatar_thumbnail_small', 'avatar_thumbnail_medium', 'contacts', 'suggested_contacts')

并且我已经在 urls.py 中注册了 url

router = routers.DefaultRouter()
router.register(r'users', app.views_rest.UserViewSet, base_name="users")

但是当我尝试获取 url/api/users/2,3/或/api/users/me/时,它会给出一条 json 消息,说明未找到详细信息。

/api/users/2/、/api/users/3/和/api/users/工作正常。

感谢您的帮助。

最佳答案

这将不起作用,因为检索操作之后还会调用 get_object 而您没有覆盖它。参见 https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/generics.py#L76

关于django - 在 ModelViewSet 中覆盖 get_queryset 时找不到详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39244925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com