Есть ли способ заставить графен работать с полем django GenericRelation? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть несколько общих полей отношения модели django, которые я хочу отображать в запросах graphql.Поддерживает ли графен универсальные типы?

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 Ответ

1 голос
/ 16 мая 2019

Вам нужно выставить 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()
...