【发布时间】:2021-02-17 00:52:10
【问题描述】:
我在我的项目上创建了一个模型 Checkout,使用 CheckoutType 来处理请求,但现在我需要一个 Profile,它基本上只是在 Checkout 上获取许多字段。问题是 Checkout 和 Profile 将由具有非常不同权限的用户检索,而第一个将拥有正确的权限,而第二个则不能拥有它们。所以我创建了 2 种类型:
结帐:
class CheckoutType(ModelType):
class Meta:
model = Checkout
interfaces = [graphene.relay.Node]
connection_class = CountableConnection
permissions = ['app.view_checkout']
filter_fields = {
'zone': ['exact'],
'vehicle__mark': ['exact'],
'status': ['exact']
}
简介:
class ProfileFilter(django_filters.FilterSet):
class Meta:
model = Checkout
fields = ['zone','status']
@property
def qs(self):
# The query context can be found in self.request.
return super(ProfileFilter, self).qs.filter(salesman=self.request.user)
class ProfileType(ModelType):
class Meta:
model = Checkout
interfaces = [graphene.relay.Node]
connection_class = CountableConnection
filterset_class = ProfileFilter
这里的问题是,第一个不应该过滤,只是一个常规模式,而第二个应该由发出请求的用户过滤,这和权限是我使用 2 的原因,但是一旦我实施,我为 Checkout Type 所做的所有测试都开始失败,因为它似乎试图使用 ProfileType。我搜索了一下,似乎中继只允许 Django 中每个模型的类型,所以这种方法似乎不可能,但我不确定如何在另一个模式上覆盖 CheckoutType,或者如何制作第二个类型具有不同的权限和不同的过滤器。有人知道这是否可能吗?
【问题讨论】:
-
问题标题应该澄清这不是针对 vanilla
graphene,而是专门针对扩展它的graphene-django包并且它与 django 模型相关。