Я создаю API с платформой Django Rest Framework для сайта, который позволяет пользователям создавать сообщения и комментировать эти сообщения. Я могу создавать сообщения от API нормально, но когда я пытаюсь создать комментарий, я получаю следующую ошибку:Django REST Framework - создать дочерний элемент вложенных отношений
NOT NULL ограничения не удалось: app_comment.post_id
моих моделей:
class Post(models.Model):
owner = models.ForeignKey('auth.User', related_name = 'posts')
post_title = models.CharField(max_length=200)
post_description = models.CharField(max_length=1000)
class Comment(models.Model):
user = models.ForeignKey(User, related_name = 'comments')
post = models.ForeignKey(Post, related_name = 'comments')
text = models.CharField(max_length=1000)
и мой комментарий сериализатору:
class CommentSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
post = serializers.ReadOnlyField(source='post.id')
class Meta:
model = Comment
fields = ('id', 'text', 'user', 'post')
и мой комментарий мнение:
class PostCommentList(generics.ListCreateAPIView):
permission_classes = (permissions.IsAuthenticated,
IsOwnerOrReadOnly,)
serializer_class = CommentSerializer
def get_queryset(self):
post = self.kwargs['post_pk']
post = Post.objects.get(pk = post)
return post.comments.all()
def perform_create(self, serializer):
post = self.kwargs['post_pk']
print("creating a comment from " + str(self.request.user) + " on post " + str(post) +" : "+ str(Post.objects.get(pk = post)))
serializer.save(user = self.request.user)
serializer.save(post = self.kwargs['post_pk'])
При попытке создать комментарий к сообщению я вижу правильную информацию, распечатанную (т. 'создание комментария от пользователя в post 6: Post object').
Почему мои комментарии не создаются с правильным post_id?
Почему вы перегрузки 'get_queryset' и' perform_create'? Думаю, он должен нормально работать, если вы этого не сделаете. Не могли бы вы проверить это, пожалуйста? –
Я перегружаю get_queryset, так что будут возвращены только комментарии, прикрепленные к определенному сообщению, и я перегружаю функцию perform_create, чтобы я мог получить номер сообщения из URL-адреса и пользователя из запроса (аналогично примеру здесь : http://www.django-rest-framework.org/api-guide/generic-views/). Я попробую удалить их, но я верю, что это нарушит другие функции. – KSmith