Convert the API to use viewsets. The search function is now a service of the search model resource. The simple and advance search are now the same service. The difference is determined by the URL query. A ?q= means a simple search. For advanced search pass the search model fields in the URL query, example: ?q=document_type__label= Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
26 lines
874 B
Python
26 lines
874 B
Python
from __future__ import unicode_literals
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
class SearchFieldSerializer(serializers.Serializer):
|
|
field = serializers.CharField(read_only=True)
|
|
label = serializers.CharField(read_only=True)
|
|
|
|
|
|
class SearchModelSerializer(serializers.Serializer):
|
|
app_label = serializers.CharField(read_only=True)
|
|
model_name = serializers.CharField(read_only=True)
|
|
pk = serializers.CharField(read_only=True)
|
|
search_fields = SearchFieldSerializer(many=True, read_only=True)
|
|
search_url = serializers.HyperlinkedIdentityField(
|
|
lookup_field='pk',
|
|
lookup_url_kwarg='search_model_name',
|
|
view_name='rest_api:search_model-search'
|
|
)
|
|
url = serializers.HyperlinkedIdentityField(
|
|
lookup_field='pk',
|
|
lookup_url_kwarg='search_model_name',
|
|
view_name='rest_api:search_model-detail'
|
|
)
|