Мой serilazer не работает, показывает "'Tag' object is not iterable", не могли бы вы мне помочь

я создаю свой личный блогпост и использую django rest framework для создания своего api У меня проблема с моим тегом Post_TagSerializer когда я обращаюсь к тегу как python, он показывает мне ошибку, что я двигаю это изображение выше

Это мой код это мой сериализатор

class Post_TagSerializer(serializers.ModelSerializer):
        tags = TagSerializer(many=True)  # Show names of associated tags
        postlist = PostSerializer(many=True, read_only=True)
       

        class Meta:
            model = Post_Tag
            fields="__all__"

а это моя модель

from django.db import models

# Create your models here.


class Tag(models.Model):
    
    tName = models.CharField(max_length=100)
    _created = models.DateField()
    
    def __str__(self):
        return self.tName
    
 
class Category(models.Model):
   
    cName = models.CharField(max_length=50)
    cDescription = models.CharField(max_length=250)
    
    def __str__(self):
        return self.cName
    
class Post(models.Model):
    postName = models.CharField(max_length=200)
    postDescription = models.CharField(max_length=250)
    category_id = models.ForeignKey(Category, on_delete=models.CASCADE , related_name="postlist") 
    release_date = models.DateField(auto_now_add=True)
    #tags = models.ManyToManyField(Tag)
    
    def __str__(self):
        return self.postName
    
class Post_Tag(models.Model):
    postId = models.ForeignKey(Post , on_delete=models.CASCADE ,related_name="postlist")
    tags = models.ForeignKey(Tag, on_delete=models.CASCADE , related_name='tags')
    
    def __str__(self):
        return str(self.postId)

и это мое мнение

class TagPostAV(APIView):
    def get(self, request, tags):
        try:
            # Filter Post_Tag objects based on tags__tName
            tagpost = Post_Tag.objects.filter(tags__tName=tags)

            # Check if any results were found
            if not tagpost.exists():
                return Response({'error': 'tag not found'}, status=status.HTTP_404_NOT_FOUND)

            # Create a serializer instance with many=True for multiple objects
            serializer = Post_TagSerializer(tagpost, many=True)

            return Response(serializer.data)
        except Exception as e:  # Handle potential exceptions
            return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

и вот мой url.py

from django.urls import path
from . import views
from .views import MyTokenObtainPairView
from hippone_app.api.views import PostListAV , PostDetailAV , TagAV , CategoriesAV ,TagDetailAV ,CategoriesDetailAV ,TagPostAV
from rest_framework_simplejwt.views import (
   
    TokenRefreshView,
)

urlpatterns = [
    path('', views.getRoutes),
    path('token/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
  
    path('post/', PostListAV.as_view() , name='post_list') ,
    path('post/<int:pk>',PostDetailAV.as_view(), name='post_detail_list'),
   
    path('tag/', TagAV.as_view(), name='tag_list'),
    path('tag/<int:pk>', TagDetailAV.as_view(), name='tag_detail_list'),
    
    path('categories/', CategoriesAV.as_view(), name='category_list'),
    path('categories/<int:pk>', CategoriesDetailAV.as_view(), name='category_detail_list'),
    
    path('postTag/<str:tags>/',TagPostAV.as_view(),name='posttag')
    #path('postTag/',TagPostAV.as_view(),name='posttag')
  ###  path('categories/<int:pk>', CategoriesAV.as_view(), name='category_list'),


]

Моя проблема в том, что когда я захожу в http://127.0.0.1:8000/api/postTag/python/ он показывает мне enter image description here

помогите мне

Вам нужно отправить теги param в качестве параметра query_parameter вот так и изменить вид на такой:

class TagPostAV(APIView):
    def get(self, request):
        try:
            # Filter Post_Tag objects based on tags as Query_params
            tags = self.request.query_params.get('tags')

            # Case-insensitive containment test.
            tagpost = Item.objects.filter(name__icontains=tags)
            # Case-insensitive exact match. 
            tagpost = Item.objects.filter(name__iexact=tags)
            # Case-sensitive containment test.
            tagpost = Item.objects.filter(name__contains=tags)
            # Case-sensitive starts-with test.
            tagpost = Item.objects.filter(name__startswith=tags)
            #  Case-sensitive ends-with test.
            tagpost = Item.objects.filter(name__endswith=tags)
            
            # Check if any results were found
            if not tagpost.exists():
                return Response({'error': 'tag not found'}, status=status.HTTP_404_NOT_FOUND)

            # Create a serializer instance with many=True for multiple objects
            serializer = ItemSerializer(tagpost, many=True)

            return Response(serializer.data)
        except Exception as e:  # Handle potential exceptions
            return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

Вот ссылка: https://docs.djangoproject.com/en/5.0/ref/models/expressions/#:~:text=Использование%20F()%20в%20фильтрах,F()%20выражений%20в%20запросах.

enter image description here

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