python - 在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)
但是,此代码不起作用,因为ProjectType
在UserType
类中未定义,并且交换这些类不会有太大帮助。
我试图根本不包含属性,并且在创建了所有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)
并且这两个属性都可以按需要工作。
推荐阅读
- postgresql - 使用 AWS CLI 创建 AWS aurora postgres 实例的正确参数是什么?
- r - 如何在ggplot中手动在图例下方添加文本?
- python - AWS CodeBuild 彩色日志
- java - JAVA中银行账户程序的输出有问题
- java - 通过使用 HTMLUnit 按下 JS 按钮来浏览网站
- windows - 通过批处理脚本中的匹配索引获取子字符串的位置
- google-cloud-firestore - Firestore 进行复合查询,但我需要一个查询
- sql - Oracle SQL Developer - 网格中每页的记录
- github - 在 GitHub 操作中评论拉取请求
- xcode - 当嵌入式框架之一禁用位码时,为什么 Xcode 不允许在启用位码的情况下进行编译?