有没有一种方法可以使石墨烯与Django GenericRelation字段一起使用?

时间:2019-05-15 10:19:38

标签: python django graphql graphene-python

我有一些要在graphql查询中显示的Django模型通用关系字段。石墨烯是否支持通用类型?

class Attachment(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    file = models.FileField(upload_to=user_directory_path)
class Aparto(models.Model):
    agency = models.CharField(max_length=100, default='Default')
    features = models.TextField()
    attachments = GenericRelation(Attachment)

石墨烯类:

class ApartoType(DjangoObjectType):
    class Meta:
        model = Aparto
class Query(graphene.ObjectType):
    all  = graphene.List(ApartoType)
    def resolve_all(self, info, **kwargs):
        return Aparto.objects.all()

schema = graphene.Schema(query=Query)

我希望附件字段出现在graphql查询结果中。仅显示代理商和功能。

1 个答案:

答案 0 :(得分:1)

您需要向架构公开Attachment。石墨烯需要type才能用于任何相关领域,因此它们也需要公开。

此外,您可能想解析相关的attachments,因此您将要为其添加解析器。

在您的石墨烯类中,尝试:

class AttachmentType(DjangoObjectType):
    class Meta:
        model = Attachment

class ApartoType(DjangoObjectType):
    class Meta:
        model = Aparto

    attachments = graphene.List(AttachmentType)
    def resolve_attachments(root, info):
        return root.attachments.all()