title: DRF - queryset filter using contains field lookup on SlugRelatedField
body: <p>I am struggling to figure out the how to run queryset filter using "field__contains" on a SlugRelatedField.
  I have a simple Book model and a Tag model that looks as following:</p>
  
  <pre><code>class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
  
  class MetaTag(models.Model):
    book = models.ManyToManyField('Book', related_name='meta_tags',
    help_text='The book this meta tag belongs to')
    value = models.CharField(max_length=400, unique=True, help_text='Meta tag value')
  
  class BookSerializer(serializers.HyperlinkedModelSerializer):
    class BookHyperlink(serializers.HyperlinkedIdentityField):
      """A Hyperlink field for book details"""
  
        def get_url(self, obj, view_name, request, format):
          url_kwargs = {
              'pk': obj.id,
          }
          return reverse(view_name, kwargs=url_kwargs, request=request, format=format)
    url = BookHyperlink(view_name='book-detail')
    meta_tags = CreatableSlugRelatedField(many=True, slug_field='value', queryset=MetaTag.objects.all())
  
    class Meta:
      model = Book
      fields = (
          'id',
          'title',
          'publisher',
          'publication_date',
          'meta_tags',
          'url'
      )
  
  class MetaTagSerializer(serializers.ModelSerializer):
  
    class Meta:
      model = MetaTag
      fields = ('id', 'book', 'value',)
  
  class CreatableSlugRelatedField(serializers.SlugRelatedField):
  
    def to_internal_value(self, data):
      try:
          return self.get_queryset().get_or_create(**{self.slug_field: data})[0]
      except ObjectDoesNotExist:
          self.fail('does_not_exist', slug_name=self.slug_field, value=smart_text(data))
      except (TypeError, ValueError):
          self.fail('invalid')
  
    class Meta:
      model = MetaTag
      fields = ('id', 'book', 'value', )
  </code></pre>
  
  <p>Now in my BooksView, I want to be able to filter the queryset by meta_tags value. I've tried the following with "__contains" field lookup:</p>
  
  <pre><code>class Books(viewsets.ModelViewSet):
    """Default view for Book."""
  
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    permission_classes = (IsAuthenticated, )
  
    filter_backends = (DjangoFilterBackend,)
    filter_fields = tuple(f.name for f in Book._meta.get_fields())
  
    def get_queryset(self):
  
      search_pattern = self.request.query_params.get('search', None)
      if search_pattern is not None and search_pattern is not '':
          self.queryset = self.queryset.filter(meta_tags__contains = search_pattern)
      return self.queryset
  
  def get_object(self):
      if self.kwargs.get('pk'):
          return Book.objects.get(pk=self.kwargs.get('pk'))
  </code></pre>
  
  <p>But I get the following error from django:</p>
  
  <blockquote>
    <p>File "~MyProject/venv/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1076, in build_lookup
        raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name))
    django.core.exceptions.FieldError: Related Field got invalid lookup: contains</p>
  </blockquote>
  
  <p>Which as I understand means that since "meta_tags" is not a regular array or Text field, the contains field lookup cannot be applied on that field.</p>
  
  <p>What is the best way if so to filter the queryset in such case for meta_tags value?</p>