假设我的 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()
添加属性。这种黑客肯定会设置属性,使类具有完全相同的结构,但似乎为时已晚:根本无法从 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)
这两个属性都可以按需要工作。
关于python - 使循环依赖模型属性在 graphene-django 中可查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55549779/