gpt4 book ai didi

python - 如何通过request.user过滤django-tastypie的ToManyField?

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:44 25 4
gpt4 key购买 nike

我正在为基于用户的数据的 django 应用程序构建一个带有 tastypie 的 API。资源是这样的:

class PizzaResource(ModelResource):
toppings = fields.ToManyField(
'project.app.api.ToppingResource',
'topping_set'
)

class Meta:
authentication = SessionAuthentication()
queryset = Pizza.objects.all()

def apply_authorization_limits(self, request, object_list):
return object_list.filter(users=request.user)


class ToppingResource(ModelResource):
pizza = fields.ForeignKey(PizzaResource, 'pizza')

class Meta:
authentication = SessionAuthentication()
queryset = Topping.objects.filter()

对应的模型是这样的:

class Pizza(model):
users = ManyToManyField(User)
toppings = ManyToManyField(Topping)
# other stuff

class Topping(Model):
used_by = ManyToManyField(User)
# other stuff

现在我要做的是通过 Topping.used_by 字段过滤与 pizza 一起列出的 toppings。我刚找到 how to filter this field by request unrelated data .

如何根据请求数据过滤tastypie的关系字段?

最佳答案

最后我通过tastypie的代码一步步找到了答案。事实证明,ToMany 关系定义中的模型字段(此处为 topping_set)可以设置为可调用对象。

在可调用函数中,您可以将 bundle 数据作为唯一参数,用于对结果数据进行脱水处理。在这个 bundle 中始终是请求以及我想用来过滤的 user 实例。

所以我所做的就是改变这个:

toppings = fields.ToManyField(
'project.app.api.ToppingResource',
'topping_set'
)

为此:

toppings = fields.ToManyField(
'project.app.api.ToppingResource',
lambda bundle: Topping.objects.filter(
pizza=bundle.obj,
used_by=bundle.request.user
)
)

就是这样!

关于python - 如何通过request.user过滤django-tastypie的ToManyField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14417202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com