2016-08-31 1 views
2

Я перекрывая 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/отлично работает.

Спасибо за помощь.

+1

Я не очень уверен, но я думаю, что маршрутизатор принимает только одно число для pk kwarg. Внутреннее регулярное выражение, вероятно, похоже на '(? P \ d +)' –

+0

Как вы можете видеть, я использую маршрутизатор, который обрабатывает параметры. На самом деле, если я печатаю (self.kwargs ['pk']), я успешно получаю параметр «me». – aeio

+0

Затем вы должны показать остальную часть кода для этого маршрутизатора. –

ответ

Смежные вопросы