我有一個視圖,它回傳 request.user 擁有的所有在學校作業或學生的用戶,在我的模型中,我有兩個欄位works,并且learns是參考學校物件的外鍵欄位,當過濾用戶以匹配request.user 擁有的學校,我必須像這樣過濾:
class AllUserList(generics.ListAPIView):
permission_classes = [IsSchoolOwner, ]
# queryset = User.objects.exclude(type__isnull=True)
serializer_class = ListUsersSerializer
def get_queryset(self):
request = self.request.user
if request.type == User.TYPES.OWNER:
queryset = User.objects.filter(is_active=True,
type__isnull=False, works__in=request.owns.all(), learns__in=request.owns.all())
return queryset
這里有一個問題,因為在學校作業的用戶將learns欄位設定為空,學生將works欄位設定為空,所以我如何才能找到其中一個欄位是否匹配,如果他們確實忽略了另一個欄位。
uj5u.com熱心網友回復:
您可以使用Q物件 [Django-doc]指定條件來定義分離條件:
class AllUserList(generics.ListAPIView):
permission_classes = [IsSchoolOwner, ]
model = User
queryset = User.objects.all()
serializer_class = ListUsersSerializer
def get_queryset(self):
user = self.request.user
qs = super().get_queryset()
if request.type == User.TYPES.OWNER:
qs = qs.filter(
Q(works__in=user.owns.all()) | Q(learns__in=user.owns.all()),
is_active=True, type__isnull=False
)
return qs
有關詳細資訊,請參閱檔案的復雜查找Q物件部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424964.html
標籤:Python django django-views django过滤器
