Я создаю серверную часть блога, используя Django Rest Framwork. Я использую Djoser для управления пользователями. Аутентифицированные пользователи могут выполнять операции CRUD в своем сообщении в блоге, и любой зарегистрированный пользователь может ставить лайки и комментировать сообщения. Я не могу установить sh отношения между сообщениями и комментариями. Пожалуйста, помогите
MODELS.PY
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings
class User(AbstractUser):
# codes here for user creation,removed codes for simplicity of stackoverflow readers
class OwnedModel(models.Model):
owner = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True)
class Meta:
abstract = True
class Post(OwnedModel):
name = models.CharField(max_length=100,null=True)
likes = models.ManyToManyField(User)
class Comment(models.Model):
body = models.TextField()
friend = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
author = models.ForeignKey(User, on_delete=models.CASCADE)
VIEWS.PY
from rest_framework import viewsets,permissions
from . import models,serializers
from .permissions import IsOwner
from rest_framework.permissions import IsAuthenticated
class PostViewset(viewsets.ModelViewSet):
queryset = models.Post.objects.all()
serializer_class = serializers.PostSerializer
permission_classes = [IsOwner]
class CommentViewset(viewsets.ModelViewSet):
queryset = models.Comment.objects.all()
serializer_class = serializers.CommentSerializers
permission_classes = [IsAuthenticatedOrReadOnly]
** SERIALISERS.PY **
from rest_framework import serializers
from .models import Post,User,Comment
from djoser.serializers import UserCreateSerializer,UserSerializer
class PostSerializer(serializers.ModelSerializer):
owner = serializers.HiddenField(
default=serializers.CurrentUserDefault())
class Meta:
model = Post
fields = ('id', 'name',"owner",'likes')
class UserCreateSerializer(UserCreateSerializer):
class Meta(UserCreateSerializer.Meta):
model = User
fields=('id','email','username','phone','first_name','last_name','password',)
class CommentSerializers(serializers.ModelSerializer):
class Meta:
model = Comment
fields=('__all__')
** PERMISSIONS.PY **
from rest_framework import permissions
class IsOwner(permissions.BasePermission):
message = "Not an owner."
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return request.user == obj.owner
** URLS.PY **
from django.contrib import admin
from django.urls import path,include
from rest_framework import routers
from rental.views import PostViewset,CommentViewset
from django.contrib.auth import views as auth_views
router = routers.DefaultRouter()
router.register(r'posts', PostViewset)
router.register(r'comments', CommentViewset)
urlpatterns = [
path('admin/', admin.site.urls),
path('v/', include(router.urls)),
path('',include('djoser.urls')),
path('',include('djoser.urls.authtoken')),
]
* Если мои коды сбивают вас с толку, вы можете поделиться любой подобной ссылкой на репозиторий Github, по которой я буду следовать *