gpt4 book ai didi

django - 在 Django Rest Framework 中过滤详细结果

转载 作者:行者123 更新时间:2023-12-02 06:15:47 25 4
gpt4 key购买 nike

我有以下型号

class CustomUser(AbstractBaseUser, PersmissionsMixin):
#custom fields
practice = models.ForeignKey(Practice)

class Customer(models.Model):
#fields
practice = models.ForeignKey(Practice)

class Peri(models.Model):
customer = models.ForeignKey(Customer)

我还想为 Peri 模型创建一个 api,但我想将结果限制为与 peri 所属客户属于同一实践的经过身份验证的用户。因此,在为 PeriModel 创建序列化器后,我为其创建了 ModelViewSet,如下所示

class PeriViewSet(ModelViewSet):
#serializer_class etc

def get_queryset(self):
user = self.request.user
practice = user.practice
return Peri.objects.filter(customer__practice=practice)

以上代码将仅返回那些属于与登录用户具有相同做法的客户的 peri。所以像这样:

http://example.com/api/peri/

将返回上面过滤后的查询集。但细节 View 又如何呢? ModelViewSet 的详细 View 是否重新评估查询集?或者它是否使用由 get_queryset 计算的预先存在的查询集?

我的意思是,如果我的查询集包含 id 为 [2,5,6,7] 的模型,并且用户尝试访问以下网址

http://example.com/api/peri/9/ 

假设 id 为 9 的 peri 没有与登录用户相同的做法,他会得到任何结果吗?过滤 ListView 查询集也适用于 DetailView 吗?如果我用这个方法会不会更好here在自定义通用过滤部分下??

最佳答案

查看 django-rest-framework ( https://github.com/tomchristie/django-rest-framework ) 的源代码,位于 generics.py 模块:

def get_object(self):        """        Returns the object the view is displaying.        You may want to override this if you need to provide non-standard        queryset lookups.  Eg if objects are referenced using multiple        keyword arguments in the url conf.        """        queryset = self.filter_queryset(self.get_queryset())        [...]

因此,get_object 使用get_queryset 来检索对象。因此,过滤 get_queryset 就足够了。

我必须注意到 django-rest-framework 是一个非常出色的框架,但我经常需要检查最终的真相(源代码)以找到像您这样的问题的答案

关于django - 在 Django Rest Framework 中过滤详细结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27502107/

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