如何在django rest framework serialiser的视图中应用自定义过滤器?

时间:2016-01-20 06:52:38

标签: python django django-rest-framework

我有以下三个模型定义

class Program(models.Model):

    title = models.CharField(max_length=200, null=True, blank=True)
    assigned_by = models.ForeignKey('physio.Physio', null=True, blank=True)
    assigned_to = models.ManyToManyField('patient.Patient')
    start_date = models.DateTimeField(null=True, blank=True)
    end_date = models.DateTimeField(null=True, blank=True)
    duration = models.CharField(max_length=200, null=True, blank=True)
    description = models.CharField(max_length=200, null=True, blank=True)
    exercises = models.ManyToManyField(
        'exercise.Exercise')

这是序列化器

class ProgramSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Program
        fields = (
            'title', 'assigned_by', 'start_date', 'end_date', 'duration', 'description', 'exercises'
        )

以下是观点:

class ProgramViewSet(viewsets.ModelViewSet):

    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = Program.objects.all()
    serializer_class = ProgramSerializer

我希望将特定生理分配的所有程序都提供给患者。 如何改变观点?

URL可以是 - / programs / physio /:physioID / patient /:patientID

我使用routers作为通用列表和详细信息视图。

1 个答案:

答案 0 :(得分:0)

您可以实施.get_queryset()

ProgramViewSet方法
def get_queryset(self):

    physio = Physio.objects.get(id=self.kwargs['physioID'])
    patient = Patient.objects.get(id=self.kwargs['patientID'])

    return Purchase.objects.filter(assigned_by=physio,
                                   assigned_to=patient)

documentation中所述。