title: django rest framework how to define required fields per ViewSet action
body: <p>I am trying the tutorial from DRF and I found something confused. 
  I have a User model which simply extends auth.User like this</p>
  
  <pre><code>class User(DefaultUser):
  """
  Represents a registered User
  """
  EMAIL_VALIDATOR_LENGTH = 6
  
  email_validated = models.BooleanField(default=False)
  # using a 6-digit numbers for email validation
  email_validator = models.CharField(
      max_length=6,
      default=_get_random_email_validator(EMAIL_VALIDATOR_LENGTH),
      editable=False
  )
  phone_number = models.CharField(validators=[phone_regex],
                                  blank=True, null=True, max_length=64)
  # country is required
  country = models.ForeignKey('Country', null=False, blank=False)
  # subdivision is optional
  subdivision = models.ForeignKey('Subdivision', null=True, blank=True)
  </code></pre>
  
  <p>Then I have my basic UserSerializer:</p>
  
  <pre><code>class UserSerializer(serializers.ModelSerializer):
  
  class Meta:
      model = User
      fields = ('id', 'email', 'password', 'email_validated',
                'email_validator', 'country', 'subdivision', 'phone_number',
                'last_login', 'is_superuser', 'username', 'first_name',
                'last_name', 'is_staff', 'is_active', 'date_joined')
  </code></pre>
  
  <p>In my views.py, I have UserViewSet:</p>
  
  <pre><code>class UserViewSet(viewsets.ModelViewSet):
  queryset = User.objects.all()
  serializer_class = UserSerializer
  
  @detail_route(methods=['get', 'post'], url_path='validate-email')
  def validate_email(self, request, pk):
      user = self.get_object()
      serializer = UserSerializer(data=request.data)
      if serializer.is_valid():
          user.is_active = True
          user.save()
          return Response({'status': 'email validated'})
      else:
          return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
  
  @detail_route(methods=['post'], url_path='set-password')
  def set_password(self, request, pk):
      pass
  
  @list_route()
  def test_list_route(self, request):
      pass
  </code></pre>
  
  <p>The issue is, in validate_email, I actually only need pk but when I test the API, it told me that username and email are also required. </p>
  
  <p>I then added following code to my UserSerializer</p>
  
  <pre><code>        extra_kwargs = {'country': {'required': False},
                      'password': {'required': False},
                      'username': {'required': False},
                      }
  </code></pre>
  
  <p>Now the above issue is gone, but when I tried to create an User, I actually do want to require username and email. </p>
  
  <p>Is there a way that I can specify which fields are required per action? 
  For example, for my set_password(), I want to require the password field.</p>
  
  <p>Thanks, </p>