query = Services.objects.filter(parent_id__isnull=True,sub_service__type=0)
當我過濾sub_service__type=1它回傳正確的輸出。即type 1對于sub_service,但是當我將其更改為sub_service__type=0 filters不起作用時。相反,它會將每個輸出都回傳給我。即type 0,1代替type 0
繼承人代碼:
# MODELS
class Services(models.Model):
type_ = ((1, 'INCLUSIVE'),
(0, 'EXCLUSIVE'))
service_id = models.AutoField(primary_key=True)
parent_id = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='sub_service')
type = models.SmallIntegerField(blank=True, null=True, choices=type_)
# VIEWS
@action(detail=False, methods=['get'], permission_classes=(AllowAny,))
def service_list(self, request):
query = Services.objects.filter(parent_id__isnull=True,sub_service__type=0)
serializer = ServiceSerializer(query , many=True).data
return Response(serializer)
# SERIALIZER
class SubServiceSerializer(serializers.ModelSerializer):
class Meta:
model = Services
fields = "__all__"
class ServiceSerializer(serializers.ModelSerializer):
sub_service = SubServiceSerializer(many=True)
class Meta:
model = Services
fields = "__all__"
uj5u.com熱心網友回復:
如果您篩選sub_service__type=1您檢索全部 Service是含有S至少涉及一個Service用type=1。但是因此允許存在Service具有不同型別的其他相關子。此外,.sub_service管理器不會過濾相關物件的查詢集。
您也可以使用Prefetch物件 [Django-doc]來過濾關系:
from django.db.models import Prefetch
query = Services.objects.filter(
parent_id__isnull=True,sub_service__type=0
).prefetch_related(Prefetch('sub_service', Service.objects.filter(type=0)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/361116.html
標籤:姜戈 django 模型 django-views
