【问题标题】:django graphene strangely does not include one of my model fieldsdjango 石墨烯奇怪地不包括我的模型字段之一
【发布时间】:2018-10-06 12:01:16
【问题描述】:

我花了几个小时在这上面,但运气不好,它看起来像一个错误。 所有字段都显示在我的查询结果中,但“类型”和“类型”和“发行者”之间没有区别,例如,两者都是外键。石墨烯在它存在时随机删除类型,当我在解析器中打印它时,我看到它有一个值。当我尝试在 graphiql 中查询字段类型时,出现以下错误:“无法在类型 \"Post\" 上查询字段 \"type\"。” 有什么想法吗?

class T(models.Model):
    type=models.CharField(default="type 1",null=False,blank=False,max_length=40)

    def str(self):
        return self.type

class Post(models.Model):
    slug=models.SlugField(unique=True)
    issuer=models.ForeignKey(User,on_delete=models.SET_NULL,blank=False,null=True,related_name="posts")
    date_created=models.DateTimeField(default=timezone.now)
    last_edited=models.DateTimeField(null=True)
    num_interests = models.IntegerField(verbose_name="Number of interests so far",default=0)
    status=models.CharField(max_length=30,default="posted")
    tags=TaggableManager()
    title=models.CharField (max_length=200,blank=False)
    description =models.TextField(max_length=settings.MAX_TEXTAREA_LEN,default="",
    validators=[MaxLengthValidatorFactory(settings.MAX_TEXTAREA_LEN)],blank=False)
    goodUntil = models.DateField(verbose_name=_("Date"),default=datetime.now()+timedelta(days=7))
    subjects=models.ManyToManyField(to=Subject,related_name='posts',blank=False)
    type=models.ForeignKey(T,on_delete=models.SET_NULL,blank=False,null=True,related_name="type")

【问题讨论】:

    标签: django graphene-python graphiql


    【解决方案1】:

    如果我没记错的话,这是石墨烯中的一个错误——石墨烯在内部使用type,这会干扰具有该名称的模型字段。我相信我过去可能遇到过这个问题,并通过重命名我的模型字段来解决它。

    例如,在您的情况下,重命名 type -> post_type

    graphene有这个限制是可以理解的,因为__type在graphQL中有特定的含义。例如,这是对名为“MyType”的DjangoObjectType 的有效查询:

    { __type(name:"MyType") {
        fields {
          name
          description
          }  
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2018-01-29
      • 2019-04-03
      • 2018-06-28
      • 2019-04-28
      • 2020-08-11
      • 2020-01-27
      • 2018-01-11
      • 2020-09-01
      相关资源
      最近更新 更多