2014-08-31 10 views
9

Bilmek istiyorum, bir istek isteği q=thisterm bir paginated json sonucu sağlamak için django-rest-framework nasıl kullanabilirim.Django-haystack'ı django-rest-framework ile entegre etme?

SearchQuerySet.filter(content=q)'u kullanarak haystack bitimini anlıyorum, ancak bu queryset ile nasıl bir api görünümü oluşturabilir ve seri hale getirebilirim. Hangi bakış açısını kullanacağımı ve geri kalan kısımda ne yapmam gerektiğinin arkasındaki temel mantığı bilmiyorum.

Herhangi bir yardım için teşekkür ederiz.

Teşekkür

deneme yanılma bir sürü sonra

cevap

10

i doğru kombinasyonu bulduk! İşte bir başlangıç. Oluşturmak görünümü serializers.py

class DotaSearchSerializer(serializers.Serializer): 
    text = serializers.CharField() 
    name = serializers.CharField() 
    quality = serializers.CharField() 
    type = serializers.CharField() 
    rarity = serializers.CharField() 
    hero = serializers.CharField() 
    image = serializers.CharField() 
    desc = serializers.CharField() 

: views.py

class DotaSearchViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 

    serializer_class = DotaSearchSerializer 
    permission_classes = (IsAuthenticated,) 
    authentication_classes = (SessionAuthentication, BasicAuthentication) 

    def get_queryset(self, *args, **kwargs): 
     request = self.request 
     queryset = EmptySearchQuerySet() 

     if request.GET.get('q') is not None: 
      query = request.GET.get('q') 
      queryset = SearchQuerySet().filter(content=query) 

     return queryset 

Eğer girişini temizlemek ve diğer güvenlik denetimleri gerçekleştirmek isteyebilirsiniz unutmayın

bir serileştirici tanımlayın .

Rota it: urls.py

router.register(r'search', api_views.DotaSearchViewSet, base_name='search') 
+0

bu son derece yararlı oldu. Teşekkürler. Sonuç sayısını çıkış verilen JSON'a nasıl ekleyeceğiniz konusunda tavsiyede bulunabilir misiniz? –

+0

Django REST Framework için Haystack'a bir göz atın: https://github.com/inonit/drf-haystack – Daviddd

+0

HayStack'ın SearchQuerySet'i almanız için gereken sonuçları alıyorsunuz? Bu, HayStack View (Arama Formları durumunda) kullanıldığında veya herhangi bir performans farklılığı olduğunda takip edilen aynı mekanizma mıdır? –