Использование поля модели json с графеном Джанго - PullRequest
0 голосов
/ 27 июня 2018

Я работаю с конечной точкой graphql для своего проекта. Одна из моделей имеет текстовое поле, которое содержит несколько json. Если я запрашиваю список моих сущностей через graphql, я получаю этот json как строку. Как получить возможность использовать его в graphql как вложенную структуру с возможностью фильтрации, выбора некоторых свойств и т. Д.

class SysObjects(models.Model):
    id = models.BigAutoField(primary_key=True)
    user_id = models.BigIntegerField()
    type_id = models.PositiveIntegerField(blank=True, null=True)
    # status = models.ForeignKey('SysObjectsStatuses', models.DO_NOTHING, blank=True, null=True)
    title = models.CharField(max_length=255, blank=True, null=True)
    data = models.TextField(blank=True, null=True) #json string is here
    visible = models.IntegerField()
    date_actual = models.DateTimeField()
    date_update = models.DateTimeField(blank=True, null=True)
    date_add = models.DateTimeField(blank=True, null=True)
    orig = models.CharField(max_length=255, blank=True, null=True)
    is_color = models.PositiveIntegerField()

    class Meta:
        managed = False
        db_table = 'sys_objects'
        app_label = "default"

    def __str__(self):
        return self.title

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете объявить распознаватель для поля данных с пользовательским типом, например,

import graphene
from graphene.django.types import DjangoObjectType

class SysObjectsType(DjangoObjectType):
    data = DataType()

    class Meta:
        model = SysObjects

    def resolve_data(self, info):
        # What you return here depends on how you are unpacking the JSON data
        return self.data

class DataType(graphene.ObjectType):
    # What you put here depends on how you want to structure the JSON output
    ...

Возможно, вы сможете расширить эту идею для данных DataType, чтобы они возвращали данные DataType и, таким образом, могли обрабатывать произвольно глубокие деревья данных.

...