Фильтр графена Джанго по родовой связи - PullRequest
0 голосов
/ 22 мая 2019

Я использую графен-джанго с джанго-фильтром.Возникла проблема с фильтрацией объекта с помощью django GenericForeignKey.Я попробовал пользовательский FilterSet, но не повезло.Итак, вот мои модели и схемы.

class Feature(models.Model):
    start_time = models.DateTimeField(db_index=True, validators=[validate_start_time])
    content_type = models.ForeignKey(
        ContentType, on_delete=models.CASCADE, limit_choices_to={"model__in": ["album", "collection", "mix"]}
    )
    object_id = models.UUIDField(db_index=True, unique_for_date="start_time")
    item = GenericForeignKey("content_type", "object_id")

    objects = FeatureQuerySet.as_manager()

class Album(models.Model):
    cover = ImageField(upload_to="album", blank=True, help_text="600x600")
    single = models.BooleanField(default=False)
    featured = GenericRelation("Feature")

, а вот моя схема, использующая DjangoObjectType:

class FeatureNode(DjangoObjectType):
    class Meta:
        model = Feature
        interfaces = (relay.Node,)
        filter_fields = ("content_type",)

class AlbumNode(DjangoObjectType):
    class Meta:
        model = Album
        filter_fields = ("is_new_release", "single", "featured")
        interfaces = (relay.Node,)

class FeatureFilter(django_filters.FilterSet):
    featured__start_time = django_filters.DateFilter()

    class Meta:
        model = Album
        fields = ("featured",)

class Query(ObjectType):
    album = relay.Node.Field(AlbumNode)
    albums = DjangoFilterConnectionField(AlbumNode, filterset_class=FeatureFilter)

Что я хотел сделать - я хочу получить Albums запрос с featured:True флаг.Нравится следующее:

query FeaturedAlbums {
   albums(featured:True) {
     edges {
       node {
         id
       }
     }
   }
}
...