Параметр запроса не фильтрует тег с именем, включающим знак ++ или +

В настоящее время у меня странная проблема, когда я пытаюсь выполнить поисковый запрос по тегу

например, тег = Python, тогда он покажет все статьи, связанные с python,

{
            "id": 1,
            "headline": "Article 1",
            "abstract": "Abstract 1",
            "content": "Content 1",
            "published": "2022-10-05",
            "isDraft": true,
            "isFavourite": [
                2
            ],
            "tags": [
                "Python"
            ],

но если я пытаюсь запросить поиск с k++ или c++ или любым словом, содержащим +, то он выдает пустой ответ, как это

{
    "count": 0,
    "next": null,
    "previous": null,
    "results": []
}

Я не понимаю, почему он не показывает результат, хотя у меня есть статья, которая содержит k++ в тегах

вот мои модели тегов:

class Tags(models.Model):
    id=models.AutoField(primary_key=True, auto_created=True, verbose_name="TAG_ID") 
    tag=models.CharField(max_length=25)

    
   def get_id(self):
        return self.tag + ' belongs to ' + 'id ' + str(self.id)


   class Meta:
        verbose_name_plural="Tags"
        ordering= ("id", "tag")
        
   def __str__(self):
        return f'{self.tag}'

вот моя модель статей, где теги идут как m2m поле

модель частиц

class Article(models.Model):
    id=models.AutoField(primary_key=True, auto_created=True, verbose_name="ARTICLE_ID")
    headline=models.CharField(max_length=250)
    abstract=models.TextField(max_length=1500, blank=True)
    content=models.TextField(max_length=2500, blank=True)
    files=models.ManyToManyField('DocumentModel', related_name='file_documents',related_query_name='select_files', blank=True)
    published=models.DateField(auto_now_add=True, null=True)
    tags=models.ManyToManyField('Tags', related_name='tags', blank=True)
    isDraft=models.BooleanField(blank=True, default=False)
    isFavourite=models.ManyToManyField(User, related_name="favourite", blank=True)
    created_by=models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True, related_name="articles")

  
   
    def get_id(self):
        return self.headline + ' belongs to ' + 'id ' + str(self.id)

    
    

    
    class Meta:
        verbose_name_plural= "Articles"
        ordering=("id" , "headline", "abstract", "content",  "published", "isDraft", "created_by")

    def __str__(self):
        return f'{self.headline}'

вот мое представление, где я выполнил логику для параметров запроса

views.py


class ArticleViewSet(viewsets.ModelViewSet):



    serializer_class=ArticleSerializer
    permission_classes=[permissions.IsAuthenticated]
    pagination_class=StandardResultSetPagination

    filter_backends= (DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter)
    filterset_fields= ['headline', 'isDraft']
    search_fields=['headline']
    ordering_fields = ['id']

    def get_queryset(self):

       user = self.request.user
       tags=self.request.query_params.get('tags')
       query_params = {}

       if tags is not None:
            query_params['tags__tag']=tags

       return Article.objects.filter(created_by=user, **query_params)

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)

serializers.py

class ArticleSerializer(serializers.ModelSerializer): 

   

    
    #serializer for getting username of User

    created_by=serializers.CharField(source='created_by.username', read_only=True)
    files=DocumentSerializer(many=True, read_only=True)
    isFavourite=serializers.PrimaryKeyRelatedField(many=True, read_only=True)
    tags=serializers.SlugRelatedField(many=True, queryset=Tags.objects.all(), slug_field="tag")
    

    
    
    
    
    class Meta:
        model= Article
      
        fields = ["id" , "headline", "abstract", "content",  "published", "isDraft", "isFavourite", "tags", 'files', 'created_by', ]  

Пожалуйста, кто-нибудь может помочь, я не знаю, почему возникает эта проблема!

Вернуться на верх