¿Cómo utilizar ModelMultipleChoiceFilter?

He estado tratando de hacer que un ModelMultipleChoiceFilter funcione durante horas y he leído la documentación de DRF y Django Filters.

Quiero poder filtrar un conjunto de sitios web en función de las etiquetas que se les han asignado a través de ManyToManyField. Por ejemplo, quiero poder obtener una lista de sitios web que han sido etiquetados como "Cocina" o "Apicultura".

Aquí está el fragmento relevante de mis modelos actuales.py:

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

Y mi fragmento de views.py actual:

class WebsiteFilter(filters.FilterSet):
    # With a simple CharFilter I can chain together a list of tags using &tag=foo&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',)

Acabo de probar con la cadena de consulta[/path/to/sites]?tags=News y estoy 100% seguro de que existen los registros apropiados a medida que funcionan (como se describe) con un?tag (falta els) consulta.

Un ejemplo de las otras cosas que he probado es algo como:

tags = django_filters.ModelMultipleChoiceFilter(name='tags__name', queryset=Website.objects.all(), lookup_type="in")

¿Cómo puedo devolver cualquier sitio web que tenga un SiteTag que satisfaganame == A OR name == B OR name == C?

Respuestas a la pregunta(2)

Su respuesta a la pregunta