Параметр запроса не фильтрует тег с именем, включающим знак ++ или +
В настоящее время у меня странная проблема, когда я пытаюсь выполнить поисковый запрос по тегу
например, тег = 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', ]
Пожалуйста, кто-нибудь может помочь, я не знаю, почему возникает эта проблема!