如何从Django Graphene中的Tagulous获取所有标签的列表

时间:2018-12-23 15:06:57

标签: django django-models graphene-python

这是我的模特

class FeedSource(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    feed = models.ForeignKey(Feed, on_delete=models.CASCADE) #FIXME: Deletion 
    title = models.CharField(max_length=200)
    show_on_frontpage = models.BooleanField(default=True)
    tags = TagField()

    def __str__(self):
        return self.title

    class Meta:
        ordering = ["title"]
        unique_together = (("user", "feed"))

这是我尝试在schema.py中获取所有标签的方法:

class TagType(DjangoObjectType):

    class Meta:
        model = tagulous.models.TagModel
#        model = FeedSource
        interfaces = (graphene.relay.Node,)

class Query(graphene.ObjectType):
    all_tags = graphene.List(TagType, username=graphene.String(required=True))

    def resolve_all_tags(self, info, **kwargs):
        tags = FeedSource.tags.tag_model.objects.all()
        return tags

在graphiql中,我得到了错误:Expected value of type \"TagType\" but got: Tagulous_FeedSource_tags."

如何设置模型以使GraphQL正常工作,并可以检索所有标签的列表?

2 个答案:

答案 0 :(得分:0)

默认情况下,每次您使用TagField时,Tagulous都会自动生成一个唯一的标签模型-在这里,它已经生成了模型Tagulous_FeedSource_tags(也可以作为FeedSource.tags.tag_model访问),因此引用抽象模型而不是您的字段的特定标记模型。

基于我对石墨烯的理解,我猜想它对使用基类不满意,并且希望您使用该类本身-因此尽管我自己没有尝试过,但我认为以下方法应该有效:

class TagType(DjangoObjectType):
    class Meta:
        model = FeedSource.tags.tag_model
        ...

答案 1 :(得分:0)

您可以像这样获得特定模型类型和模型上TagField()的所有标签(在这种情况下,TagField为tags

all_tags = FeedSource.tags.tag_model.objects.all()