Мой 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/
он показывает мне
помогите мне
Вам нужно отправить теги 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)