Django Rest Framework根据请求网址

时间:2018-01-03 11:37:02

标签: django api django-rest-framework

我有一个ModelViewSet,它公开了一个contacts关系,这是一个广泛的电子邮件列表。

class EmailSerializer(serializers.ModelSerializer):
    contacts = EmailContactSerializer(many=True, read_only=True)

    class Meta:
        model = Email
        fields = ('id','contact_count', 'contacts')

class EmaiViewSet(viewsets.ModelViewSet):
    serializer_class = EmailSerializer

如果我访问网址api/emails,我会收到一份很好的电子邮件列表及其所有联系人。我的问题是访问此网址的速度很慢,因为它需要为每个电子邮件实例检索所有contacts。现在,我希望在请求contact时可以使用此详细的api/emails/<email_id>列表。在列出电子邮件时,我可以在DRF中删除contacts字段?

2 个答案:

答案 0 :(得分:2)

您可以创建新的序列化程序:

class JustEmailSerializer(serializers.ModelSerializer):

    class Meta:
        model = Email
        fields = ('id','contact_count')

并覆盖get_serializer_class的{​​{1}},仅将其用于EmaiViewSet操作:

list

答案 1 :(得分:-1)

喜欢这个??

class EmailSerializer(serializers.ModelSerializer):

    class Meta:
        model = Email
        # I dont see a field that shows the email field
        fields = ('id','contact_count') # you can add any other field you want 

class EmaiViewSet(viewsets.ModelViewSet):
    serializer_class = EmailSerializer