首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Graphene-Django创建多个实例

Graphene-Django创建多个实例
EN

Stack Overflow用户
提问于 2020-03-28 00:32:21
回答 1查看 382关注 0票数 1

假设我有一个包含两个表的models.py:

代码语言:javascript
复制
class Category(models.Model):
    cat = models.CharField(max_length=100)


class Thing(models.Model):
    desc = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)

我的模式如下:

代码语言:javascript
复制
class ThingType(DjangoObjectType):
    class Meta:
        model = Thing


class FindThing(graphene.ObjectType):
    things = graphene.List(
        ThingType,
        search=graphene.String(),
        thing=graphene.ID(),
    )

    def resolve_things(self, info, thing=None, search=None, **kwargs):
        qs = Thing.objects.all()

        if search:
            filter = (
                Q(desc__icontains=search)
            )
            qs = qs.filter(filter)
        if thing:
            qs = qs.filter(id=thing)

        return qs


class CreateThing(graphene.Mutation):
    id = graphene.Int()
    desc = graphene.String()
    category = graphene.Field(FindCategory)

    class Arguments:
        desc = graphene.String()
        category = graphene.Int()

    def mutate(self, info, desc, category):
        thing = Thing(
            desc=desc,
            category=Category.objects.get(id=category)
        )
        thing.save()

        return CreateThing(
            id=thing.id,
            desc=thing.desc,
            category=thing.category_id
        )
代码语言:javascript
复制
class CategoryType(DjangoObjectType):
    class Meta:
        model = Category


class GetCategory(graphene.ObjectType):
    category = graphene.List(
        CategoryType,
        category=graphene.String(),
    )

    def resolve_category(self, info, category=None, **kwargs):
        qs = Category.objects.all()

        if category:
            get = (
                Q(category__contains=category)
            )
            qs = qs.get(get)

        return qs


class FindCategory(graphene.ObjectType):
    categories = graphene.List(
        CategoryType,
        search=graphene.String(),
        cat=graphene.ID(),
    )

    def resolve_categories(self, info, cat=None, search=None, **kwargs):
        qs = Category.objects.all()

        if search:
            filter = (
                Q(cat__icontains=search)
            )
            qs = qs.filter(filter)
        if cat:
            qs = qs.filter(id=cat)

        return qs


class CreateCategory(graphene.Mutation):
    id = graphene.Int()
    cat = graphene.String()
    desc = graphene.String()

    class Arguments:
        cat = graphene.String()
        desc = graphene.String()

    def mutate(self, info, cat, desc):
        category = Category(
            cat=cat
        )
        category.save()
        thing = Thing(
            desc=desc,
            category_id=category.id
        )
        thing.save()

        return CreateCategory(
            id=category.id,
            cat=category.cat,
            desc=thing.desc,
        )

我已经成功地创建了一个模式,用户可以在其中创建一个新的类别,该类别已经链接到新创建的单个事物:

代码语言:javascript
复制
mutation createCategory{
  createCategory(cat:"cat7", desc:"defg"){
    id
    cat
    desc
  }
}

有没有可能创建一个CreateCategory django-graphene模式,其中可以创建一个包含多个额外新内容的类别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 21:28:13

您可以允许CreateCategory变体接受多个事物的描述列表:

代码语言:javascript
复制
CreateCategory:
    descs = graphene.List(String)

    class Arguments:
    descs = graphene.List(String)

然后在mutate函数中循环遍历这个列表:

代码语言:javascript
复制
new_things = []

for desc in descs:
    thing = Thing(
        desc=desc,
        category_id=category.id
    )
    thing.save()
    new_things.append(thing.desc)

return CreateCategory(
    id=category.id,
    cat=category.cat,
    descs=new_things
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60890208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档