2017-01-14 3 views
2

Я написал RegistrationView для ДжосераИзменение QuerySet в ModelViewSet в Django Framework Rest

class RegistrationView(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserRegistrationSerializer 

    permission_classes = (
     permissions.AllowAny, 
    ) 

    def perform_create(self, serializer): 
     user = serializer.save() 
     signals.user_registered.send(sender=self.__class__, user=user, request=self.request) 
     if settings.get('SEND_ACTIVATION_EMAIL'): 
      self.send_activation_email(user) 
     elif settings.get('SEND_CONFIRMATION_EMAIL'): 
      self.send_confirmation_email(user) 

    def create(self, request, *args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     self.perform_create(serializer) 
     headers = self.get_success_headers(serializer.data) 
     token = create_token(serializer.data) 
     return Response(data=token, status=status.HTTP_201_CREATED, headers=headers) 

    def send_activation_email(self, user): 
     email_factory = utils.UserActivationEmailFactory.from_request(self.request, user=user) 
     email = email_factory.create() 
     email.send() 

    def send_confirmation_email(self, user): 
     email_factory = utils.UserConfirmationEmailFactory.from_request(self.request, user=user) 
     email = email_factory.create() 
     email.send() 

Как вы можете видеть, я хочу использовать свой собственный create функцию. Вот почему я использую ModelViewSet

Но, как вы можете видеть, я объявляю запрос в том виде, в котором будут перечислены все пользовательские объекты, и мне это не очень нравится.

Итак, мой вопрос.

Есть ли способ объявить еще один «запрос», который не отображает эту информацию?

Или мне следует написать свою функцию «создать» в другом месте и не писать там запрос? Дело в том, что я хочу вызвать функцию create в процессе регистрации.

ответ

5

Почему вы не none запрос, если не хотите перечислить всех пользователей.

queryset = User.objects.none() 

Или вы также можете переопределить метод get_queryset.

def get_queryset(self): 
    qs = super(RegistrationView, self).get_queryset() 
    qs = qs.none() 
    return qs 
+0

Потому что я глуп, и я не знал, что есть метод «none()». hehe Большое спасибо !!! –

0

Я думаю, что вам не нужно ModelViewSet вообще. Это позволяет легко реализовать операции CRUD, но в вашем случае, насколько мне известно, для создания пользователя потребуется только конечная точка. Вы должны посмотреть на CreateApiView.

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

  • Нет связанных вопросов^_^