          """
          if self.main_type == '*':
              return 1
          elif self.sub_type == '*':
              return 2
          elif not self.params or self.params.keys() == ['q']:
              return 3
          return 4
  
      def quality(self):
 
</s> remove             return 1
 </s> add             return 0 </s> remove         Return a precedence level for the media type given how specific it is.
 </s> add         Return a precedence level from 0-3 for the media type given how specific it is. </s> remove             return 3
        return 4

    def quality(self):
        """
        Return a quality level for the media type.
        """
        try:
            return Decimal(self.params.get('q', '1.0'))
        except:
            return Decimal(0)
    
    def score(self):
        """
        Return an overall score for a given media type given it's quality and precedence.
        """
        # NB. quality values should only have up to 3 decimal points
        # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.9
        return self.quality * 10000 + self.precedence
 </s> add             return 2
        return 3

    #def quality(self):
    #    """
    #    Return a quality level for the media type.
    #    """
    #    try:
    #        return Decimal(self.params.get('q', '1.0'))
    #    except:
    #        return Decimal(0)
 
    #def score(self):
    #    """
    #    Return an overall score for a given media type given it's quality and precedence.
    #    """
    #    # NB. quality values should only have up to 3 decimal points
    #    # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.9
    #    return self.quality * 10000 + self.precedence </s> remove         if other.main_type != '*' and other.main_type != self.main_type:
 </s> add         if self.main_type != '*' and other.main_type != '*' and other.main_type != self.main_type: </s> remove             self.initial(request, *args, **kwargs)

            # Authenticate and check request has the relevant permissions
            self._check_permissions()

            # Get the appropriate handler method
            if self.method.lower() in self.http_method_names:
                handler = getattr(self, self.method.lower(), self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed

            response_obj = handler(request, *args, **kwargs)

            # Allow return value to be either HttpResponse, Response, or an object, or None
            if isinstance(response_obj, HttpResponse):
                return response_obj
            elif isinstance(response_obj, Response):
                response = response_obj
            elif response_obj is not None:
                response = Response(status.HTTP_200_OK, response_obj)
            else:
                response = Response(status.HTTP_204_NO_CONTENT)

            # Pre-serialize filtering (eg filter complex objects into natively serializable types)
            response.cleaned_content = self.filter_response(response.raw_content)
 </s> add             self.request = request
            self.args = args
            self.kwargs = kwargs
            return 1
          """
          if self.main_type == '*':
              return 1
          elif self.sub_type == '*':
            return 1
          elif not self.params or self.params.keys() == ['q']:
              return 3
          return 4
  
      def quality(self):
keep keep keep keep replace keep keep keep keep keep
 Renderers can now cope with parameterised args.  ResponseMixin gets cleaned up & added Renderer.can_handle_response(), mirroring Parsers.can_handle_request() 
djangorestframework/utils/mediatypes.py