class Project(models.Model):
user = models.ForeignKey(USER)
status = models.CharField(max_length=100, choices=(('NEW', 'NEW'), ('CLOSE', 'CLOSE'), ('CANCEL', 'CANCEL')))
class Investment(models.Model):
project = models.ForeignKey(Project)
status = models.CharField(max_length=100, choices=(('BOOKED', 'BOOKED'), ('FAIL', 'FAIL'), ('CANCEL', 'CANCEL')))
class ProjectSerializer(serializers.ModelSerializer):
investment = InvestmentSerializer(many=True)
class Meta:
model = Project
fields = ('id', 'status', 'investment')
class ProjectView(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
serializer_class = ProjectSerializer
def get_queryset(self):
return Project.objects.filter(user=self.request.user, status__in= ['CLOSE', 'CANCEL'], investment__status__in=["FAIL", "CANCEL"]))
我想要一个项目视图,只有投资的状态是"失败"或"取消",但上面的代码上的所有投资不仅是"失败"或"取消",如何执行此操作?
您需要在ProjectSerializer
的序列化方法内使用过滤器:
class ProjectSerializer(serializers.ModelSerializer):
investment = serializers.SerializerMethodField()
def get_investment(self, obj):
qs = obj.investment.filter(status__in=["FAIL", "CANCEL"])
serializer = InvestmentSerializer(qs, many=True)
return serializer.data
更多详细信息Serializerthodfield