Не удалось разрешить URL для отношений с гиперссылками, используя имя представления "user-detail".

Не удалось разрешить URL для гиперссылки, использующей имя представления "user-detail". Возможно, вы не включили связанную модель в свой API или неправильно настроили атрибут lookup_field для этого поля.

Serializer.py

from .models import Post
from rest_framework import serializers


class PostSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='user-detail',
                                               source='profile',)

    class Meta:
        model = Post
        fields = ['url',
                  'title',
                  'slug',
                  'author',
                  'updated_on',
                  'content',
                  'created_on',
                  'status']

Models.py

from django.db import models
from django.contrib.auth.models import User


STATUS = (
    (0, "Draft"),
    (1, "Publish")
)


class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

    class Meta:
        ordering = ['-created_on']

    def __str__(self):
        return self.title

blog/urls.py

from rest_framework import routers
from django.urls import path, include
from . import views


router = routers.DefaultRouter()
router.register(r'post', views.PostList)

urlpatterns = [

    path('api/', include(router.urls)),
    path('api-auth/', include('rest_framework.urls')),
    path('', views.PostList.as_view({'get': 'list'}), name='home'),
    path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),

]

Структура проекта: введите здесь описание изображения

Я уже давно сижу над этой проблемой, никак не могу ее решить. На stackowerflow уже есть несколько вопросов с этой ошибкой, но ни один мне не помог

Это происходит потому, что у вас нет viewset/url для модели пользователя.

Вариант 1: Вы можете создать новый набор представлений для модели пользователя и зарегистрировать его в маршрутизаторе.

Вариант 2: создать и напрямую использовать Userserializer на PostSerializer, как это

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        # import the user model
        model = User
        fields = ("id",)

class PostSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='user-detail',
                                               source='profile',)
    author =  UserSerializer()

    class Meta:
        model = Post
        fields = ['url', 'title', 'slug',
                  'author', 'updated_on', 'content',
                  'created_on', 'status']

Читайте подробнее здесь: https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects

Вернуться на верх