lqsdwtxkzlqafpvluq
lqsdwtxkzlqafpvluq

Reputation: 85

Django SearchFilter, Cannot resolve keyword

I have model

class Emails(models.Model):
    mail_theme = models.CharField(max_length=254, blank=True)
    

in my view i have added

from rest_framework import filters
class EmailsView(generics.ListCreateAPIView):

    permission_classes = (permissions.AllowAny, )
    serializer_class = EmailsSerializer
    filter_backends = (filters.SearchFilter, DjangoFilterBackend, )
    filter_fields = ('is_paid', 'new_item', 'mail_from')
    search_fields = 'mail_from'

    def get_queryset(self, *args, **kwargs):
        return Emails.objects.all()

but when i try to use mail_from field for search, i had an error:

Cannot resolve keyword 'm' into field. Choices are: id, mail_from

Upvotes: 1

Views: 59

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477265

Your search_fields [Django-doc] should be a collection of strings, for example a singleton tuple. By writing it as a string, Django iterates over the characters, and thus assumes that 'm', 'a', 'i', etc. are all search fields:

from rest_framework import filters

class EmailsView(generics.ListCreateAPIView):

    permission_classes = (permissions.AllowAny, )
    serializer_class = EmailsSerializer
    filter_backends = (filters.SearchFilter, DjangoFilterBackend, )
    filter_fields = ('is_paid', 'new_item', 'mail_from')
    search_fields = ('mail_from',)

    def get_queryset(self, *args, **kwargs):
        return Emails.objects.all()

Upvotes: 1

Related Questions