首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使循环依赖的模型属性在graphene-django中可查询

使循环依赖的模型属性在graphene-django中可查询
EN

Stack Overflow用户
提问于 2019-04-06 21:57:10
回答 1查看 93关注 0票数 1

假设我有如下的Django模型:

代码语言:javascript
复制
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)

(我故意不为属性编写查询集,以提高代码的可读性。)

我希望能够在石墨烯-django查询中看到这些属性。我的ModelType类如下所示:

代码语言:javascript
复制
class UserType(DjangoObjectType):
    class Meta:
        model = User

    projects = List(ProjectType)


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

    users = List(UserType)

但是,这段代码不起作用,因为UserType类中的ProjectType是未定义的,并且交换这些类不会有太大帮助。

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

现在我的想法用完了。有什么方法可以实现预期的行为吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-07 01:22:10

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

代码语言:javascript
复制
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)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55549779

复制
相关文章

相似问题

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