【问题标题】:graphene nodes for model inheriting from abstract superclass从抽象超类继承的模型的石墨烯节点
【发布时间】:2019-10-04 02:38:49
【问题描述】:

我有 2 个类的架构:

class Anomaly(DjangoObjectType):
    class Meta:
        model = models.Anomaly


class Batch(LoggedModel):
    class Meta:
        model = models.Batch

LoggedModel 在哪里

class LoggedModel(DjangoObjectType):
    class Meta:
        model = models.LoggedModel

最初都继承自 DjangoObjectType,但后来两者都没有公开模型超类中定义的字段 logs

class LoggedModel(models.Model):
    recursive_field = "parent_model"
    logs = models.ManyToManyField(Log, related_name="%(app_label)s_%(class)s")

    class Meta:
        abstract = True

class Anomaly(LoggedModel):
    ...

class Batch(LoggedModel):
    anomalies = models.ManyToManyField(Anomaly)

现在,在模式 Batch 中声明 LoggedModel 的子类而不是 DjangoObjectType 后,两个类的日志都公开了。任何人都可以解释一下吗?

【问题讨论】:

    标签: graphene-django


    【解决方案1】:

    您希望在模型中包含的任何相关字段都需要明确声明,就像您在第二个示例中所做的那样。在第一个示例中,即使它存在于模型定义中,日志也不会自动公开。

    在第二个中,它暴露在LoggedModel中,因此也适用于AnomalyBatch

    如果您在其中明确公开日志,您应该会发现它们都像 DjangoObjectTypes 一样工作。

    看这里:https://stackoverflow.com/a/56173485/214150

    【讨论】:

    • 只是为了澄清上面是现在正在运行的代码。上半部分是模式,下半部分是模型。 logs 是抽象模型LoggedModel 中的一个字段。如果我现在将Batch 的继承从LoggedModel 更改为DjangoObjectType,它将停止工作。
    猜你喜欢
    • 2018-09-19
    • 2017-05-13
    • 2018-06-28
    • 2018-01-29
    • 2017-11-02
    • 2021-11-06
    • 2020-04-09
    • 2021-09-25
    • 2023-01-19
    相关资源
    最近更新 更多