Django中石墨烯多对多字段的输入类型

问题描述

在 graphiql 上尝试 Mutation 时出现错误

Direct assignment to the forward side of a many-to-many set is prohibited. Use category.set() instead.

如何设置,我应该在基于 InputObjectType 的 QuestionInput 类中的 types.py 中为 category = 写什么?

我的文件如下:

models.py

from django.contrib.postgres.fields import ArrayField
from django.db import models
from ..common.models import CommonFields
from ..kategoriler.models import Kategori


class Question(CommonFields):
    question = models.TextField()
    answer = ArrayField(models.TextField())
    rightAnswer = models.TextField()
    category = models.ManyToManyField("Kategori")
    DIFFICULTY_CHOICES = (
        ('Easy','easy'),('Medium','medium'),('Hard','hard'),('Very Hard','very hard'),)
    difficulty = models.CharField(max_length=10,choices=DIFFICULTY_CHOICES,default="medium")

    def __str__(self):
        created_at = self.created_at.strftime("%b %d %Y %H:%M:%s")
        return f"Q : {self.question[:7]},Created at : {created_at}"

types.py

import graphene
from graphene import relay,ObjectType,InputObjectType
from graphene_django import DjangoObjectType

from ..models import Question


class QuestionNode(DjangoObjectType):
    class Meta:
        model = Question
        filter_fields = []
        interfaces = (relay.Node,)


class QuestionInput(InputObjectType):
    question = graphene.String(required=True)
    answer = graphene.String(required=True)
    rightAnswer = graphene.String(required=True)
    category = graphene.?????????
    difficulty = graphene.String(required=True)

create_question.py

import graphene
from graphene import relay

from ...models import Question
from ..types import QuestionNode,QuestionInput


class CreateQuestion(relay.ClientIDMutation):
    class Input:
        question_inputs = graphene.Field(QuestionInput)

    question = graphene.Field(QuestionNode)

    @classmethod
    def mutate_and_get_payload(cls,root,info,**input):
        question = Question.objects.create(**input.get("question_inputs"))
        question.save()

        return CreateQuestion(question=question)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)