说我有如下所示的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()
添加属性。这样的破解肯定会设置属性,以使类具有完全相同的结构,但这似乎为时已晚:根本无法从GraphQL访问这些属性。
现在,我的想法耗尽了。有什么方法可以实现所需的行为?
答案 0 :(得分:0)
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)
,并且两个属性都可以正常工作。