【发布时间】:2015-02-14 14:45:54
【问题描述】:
我有以下型号
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/
将返回上面过滤的查询集。但是细节视图呢? ModelViewSet 的详细视图是否重新评估查询集?还是使用get_queryset计算的预先存在的查询集?
我的意思是,如果我的查询集包含 id 为 [2,5,6,7] 的模型,并且用户尝试访问以下网址
http://example.com/api/peri/9/
如果 id 为 9 的 peri 没有与登录用户相同的做法,他会得到任何结果吗?过滤 ListView 查询集是否也适用于 DetailView?如果我在自定义通用过滤部分使用这种方法here会更好吗??
【问题讨论】:
标签: django django-rest-framework