Michaela
Michaela

Reputation: 339

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']

Upvotes: 0

Views: 304

Answers (1)

Sohaib
Sohaib

Reputation: 594

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',
        ]

Upvotes: 1

Related Questions