繁体   English   中英

在石墨烯-jjango中使循环依赖的模型属性可查询

[英]Make cyclically dependent model properties queriable in graphene-django

假设我有Django模型,如下所示:

class User(Model):
    username = CharField(...)

    @property
    def projects(self):
        return # projects the user is assigned to

class Project(Model):
    name = CharField(...)

    @property
    def users(self):
        return # users assigned to the project

class Assignment(Model):
    user = ForeignKey(User)
    project = ForeignKey(Project)

(我故意没有为属性编写查询集以使代码更具可读性。)

我希望能够在graphene-django查询中看到这些属性。 我的ModelType类看起来像这样:

class UserType(DjangoObjectType):
    class Meta:
        model = User

    projects = List(ProjectType)


class ProjectType(DjangoObjectType):
    class Meta:
        model = Project

    users = List(UserType)

但是,此代码不起作用,因为UserType类中的ProjectType未定义,并且交换这些类将无济于事。

我试图完全不包含属性,在创建了所有ModelType类之后,我尝试通过setattr()添加属性。 这样的hack肯定会设置属性,所以类具有完全相同的结构,但似乎为时已晚:根本无法从GraphQL访问这些属性。

现在我用完了想法。 有没有办法达到预期的行为?

只有在初始化类时, ModelType类的属性才有意义。 以后如何添加字段的方法是将它们直接添加到它们所在的位置。 解决方案:

class UserType(DjangoObjectType):
    class Meta:
        model = User


class ProjectType(DjangoObjectType):
    class Meta:
        model = Project

UserType._meta.fields["projects"] = get_field_as(List(ProjectType), _as=Field)
ProjectType._meta.fields["users"] = get_field_as(List(UserType), _as=Field)

并且两个属性都按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM