AttributeError: Получена ошибка атрибута при попытке получить значение для поля `comments` на сериализаторе `Post`
** В моем блоге, когда я использовал повторный просмотр всех постов, я получил эту ошибку.
**
Вот сообщение об ошибке, которое я получил:
AttributeError: Получена ошибка AttributeError при попытке получить значение для поля comments
на сериализаторе Post
.
Поле сериализатора может быть названо неверно и не совпадать с атрибутом или ключом экземпляра Post
.
Оригинальный текст исключения был: 'Post' object has no attribute 'comments'.
Я прикрепил свой код ниже. Помогите мне, как избавиться от этого.
models.py
from django.db import models
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import User
#Abstract Start
class TimeStamp(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Selection(TimeStamp):
name = models.CharField(max_length=100)
class Meta:
abstract = True
ordering = ['name']
#Abstract End
class Post(Selection):
# name = title
author = models.ForeignKey(User,on_delete=models.CASCADE)
body = models.TextField(_("content"))
slug = models.SlugField(_("slug"))
likes = models.IntegerField(_("likes"),default=0)
def __str__(self):
return self.name
class Comment(TimeStamp):
user = models.ForeignKey(User,on_delete=models.CASCADE)
content = models.TextField(_("comments"))
likes = models.IntegerField(_("likes"),default=0)
post = models.ForeignKey(Post,on_delete=models.CASCADE)
def __str__(self):
return self.content
serializers.py
from django.contrib.auth.models import User
from rest_framework import serializers
from . import models
class UserSr(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email')
class Comment(serializers.ModelSerializer):
user = UserSr()
class Meta:
model = models.Comment
exclude = ['created_at','updated_at']
class Post(serializers.ModelSerializer):
author = UserSr()
comments = Comment(many = True)
class Meta:
model = models.Post
exclude = ['created_at','updated_at']
views.py
from django.contrib.auth.models import User
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .. import serializers,models
@api_view(['POST'])
def post_create(request):
post_serializer = serializers.Post(data=request.data)
if post_serializer.is_valid():
post_serializer.save()
return Response(post_serializer.data, status=status.HTTP_201_CREATED)
return Response(post_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET'])
def postGet(request):
posts = models.Post.objects.all()
serializer = serializers.Post(posts,many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
urls.py
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
from . import views
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path("blog/",views.registration_view,name='useradd'),
path('posts/',views.postGet,name='posts'),
path('posts/create/', views.post_create, name='post-create'),
]
Я не знаю, как избавиться от этого. Я втыкал его часами. Я просмотрел много проектов, но так и не смог разобраться.
class Post(serializers.ModelSerializer):
author = UserSr()
comments = serializers.StringRelatedField(many=True)
class Meta:
model = models.Post
fields = ("id","author","comments")
Вы можете попробовать это.
Вы не должны использовать Comment
модель в сериализаторах в качестве поля