Я перекрывая get_queryset в ModelViewSet, чтобы поддержать «меня» в качестве фильтра и множественного поиска рк:деталь не найден, когда переопределение get_queryset в ModelViewSet
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')
и я зарегистрировал URL в urls.py
router = routers.DefaultRouter()
router.register(r'users', app.views_rest.UserViewSet, base_name="users")
, но когда я пытался получить URL/api/users/2,3/or/api/users/me/it дает сообщение json о том, что детали не найдены.
/api/users/2 /,/api/users/3/and/api/users/отлично работает.
Спасибо за помощь.
Я не очень уверен, но я думаю, что маршрутизатор принимает только одно число для pk kwarg. Внутреннее регулярное выражение, вероятно, похоже на '(? P \ d +)' –
Как вы можете видеть, я использую маршрутизатор, который обрабатывает параметры. На самом деле, если я печатаю (self.kwargs ['pk']), я успешно получаю параметр «me». – aeio
Затем вы должны показать остальную часть кода для этого маршрутизатора. –