Django Rest Framework, Как установить sh поле модели (между публикацией и комментариями для моего блога)? - PullRequest
0 голосов
/ 10 апреля 2020

Я создаю серверную часть блога, используя 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, по которой я буду следовать *

...