Не удалось разрешить 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