djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-errors

I am getting Integrity error in django rest framework


I am begginer in django. I would like to add some posts and comments but I am getting an Integrity error. Without comments model it was working before but it doesn´t work together. I already delete my database and makemigrations and migrate again.

post models

from django.db import models
from django.conf import settings
# from django.contrib.auth import get_user_model


# User = get_user_model()

# Create your models here.
class Post(models.Model):
    user = models.ForeignKey(
        #to=User,
        to=settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='posts',
        null=True
    )
    content = models.CharField(
        max_length=150,
        blank=False
    )
    created = models.DateTimeField(
        auto_now=True
    )
    liked_by = models.ManyToManyField(
         #to=User,
         to=settings.AUTH_USER_MODEL,
         related_name='liked_posts',
         blank=True
    ) 

post serializer

 from rest_framework import serializers
from .models import Post
from ..comment.serializers import CommentSerializer


class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        comments = CommentSerializer(source='comments.content')
        fields = [
            'id',
            'user',
            'content',
            'comments',
            'created',
            'liked_by',
        ]

comment.models

from django.db import models
from django.conf import settings
from apps.post.models import Post


# Create your models here.
class Comment(models.Model):
    user = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='comment', null=True)
    post = models.ForeignKey(to=Post, on_delete=models.SET_NULL, related_name='comment', null=True)
    content = models.CharField(max_length=150)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'Comment by: {self.user}'

comment serializer

from rest_framework import serializers
from .models import Comment


class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = ['id', 'user', 'post', 'content', 'created']

Solution

  • you need to pass the CommentSerializer field in PostSerializer Meta class properly.

    from rest_framework import serializers
    from .models import Post
    from .comment.serializers import CommentSerializer
    class PostSerializer(serializers.ModelSerializer):
        comments = CommentSerializer(many=True)
        class Meta:
            model = Post
            
            fields = [
                'id',
                'user',
                'content',
                'comments',
                'created',
                'liked_by',
                'comments',
            ]