title: How to use ModelMultipleChoiceFilter?
body: <p>I have been trying to get a ModelMultipleChoiceFilter to work for hours and have read both the DRF and Django Filters documentation.</p>
  
  <p>I want to be able to filter a set of Websites based on the tags that have been assigned to them via a ManyToManyField. For example I want to be able to get a list of websites that have been tagged "Cooking" or "Beekeeping".</p>
  
  <p>Here is the relevant snippet of my current models.py:</p>
  
  <pre><code>class SiteTag(models.Model):
      """Site Categories"""
      name = models.CharField(max_length=63)
  
      def __str__(self):
          return self.name
  
  class Website(models.Model):
      """A website"""
      domain = models.CharField(max_length=255, unique=True)
      description = models.CharField(max_length=2047)
      rating = models.IntegerField(default=1, choices=RATING_CHOICES)
      tags = models.ManyToManyField(SiteTag)
      added = models.DateTimeField(default=timezone.now())
      updated = models.DateTimeField(default=timezone.now())
  
      def __str__(self):
          return self.domain
  </code></pre>
  
  <p>And my current views.py snippet:</p>
  
  <pre><code>class WebsiteFilter(filters.FilterSet):
      # With a simple CharFilter I can chain together a list of tags using &amp;tag=foo&amp;tag=bar - but only returns site for bar (sites for both foo and bar exist).
      tag = django_filters.CharFilter(name='tags__name')
  
      # THE PROBLEM:
      tags = django_filters.ModelMultipleChoiceFilter(name='name', queryset=SiteTag.objects.all(), lookup_type="eq")
  
      rating_min = django_filters.NumberFilter(name="rating", lookup_type="gte")
      rating_max = django_filters.NumberFilter(name="rating", lookup_type="lte")
  
      class Meta:
          model = Website
          fields = ('id', 'domain', 'rating', 'rating_min', 'rating_max', 'tag', 'tags')
  
  class WebsiteViewSet(viewsets.ModelViewSet):
      """API endpoint for sites"""
      queryset = Website.objects.all()
      serializer_class = WebsiteSerializer
      filter_class = WebsiteFilter
      filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
      search_fields = ('domain',)
  ordering_fields = ('id', 'domain', 'rating',)
  </code></pre>
  
  <p>I have just been testing with the querystring <code>[/path/to/sites]?tags=News</code> and I am 100% sure that the appropriate records exist as they work (as described) with a <code>?tag</code> (missing the <code>s</code>) query.</p>
  
  <p>An example of the other things I have tried is something like:</p>
  
  <pre><code>tags = django_filters.ModelMultipleChoiceFilter(name='tags__name', queryset=Website.objects.all(), lookup_type="in")
  </code></pre>
  
  <p>How can I return any Website that has a SiteTag that satisfies <code>name == A OR name == B OR name == C</code>?</p>