基于泛型关系的石墨烯Django滤波器

2024-09-24 00:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用石墨烯django与django过滤器。使用django的GenericForeignKey筛选对象时出现问题。我试过自定义过滤器集,但没有成功。这是我的模型和模式。你知道吗

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)

我想做的是获取带有featured:True标志的Albums查询。例如:

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

Tags: djangoidtruealbummodeltimemodelstype