Как исправить ошибку со связанными моделями, сериализаторы которых имеют HyperlinkedIdentityField?
Я получаю следующую ошибку, когда пытаюсь выполнить GET запрос к странице /api/dishes-types/
в моем веб-приложении:
Неправильная конфигурация в /api/dishes-types/
Не удалось разрешить URL для отношения с гиперссылкой, используя имя представления "category-detail". Возможно, вы не включили связанную модель в свой API или неправильно настроили атрибутlookup_field
для этого поля.
Я пытался применить к своему коду все решения с этой страницы, но у меня ничего не получилось. Как решить эту ошибку? Я действительно застрял...
Вот мой код.
models.py:
* Я заменил метаклассы и магические __str__
методы, предназначенные для админ-панели
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=30, unique=True)
class DishesType(models.Model):
name = models.CharField(max_length=30, unique=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
class Dish(models.Model):
name = models.CharField(max_length=64, unique=True)
type_of_food = models.ForeignKey(DishesType, on_delete=models.CASCADE)
description = models.CharField(max_length=1000)
prices = models.JSONField()
serializers.py:
views.py:
from rest_framework.generics import get_object_or_404
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from Pub.models import Category, DishesType, Dish
from .serializers import (
CategoriesSerializer, SingleCategorySerializer,
DishesTypesSerializer, SingleDishesTypeSerializer,
DishesSerializer, SingleDishSerializer
)
class BaseViewMixin(ModelViewSet):
lookup_field = "name"
queryset = None
multiple_serializer = None
single_serializer = None
def get_serializer_class(self, *args, **kwargs):
if self.action in ["retrieve", "update", "destroy"]:
return self.single_serializer
return self.multiple_serializer
def retrieve(self, request, name=None, **kwargs):
model_instance = get_object_or_404(self.queryset, name=name)
serializer = self.single_serializer(model_instance, context={'request': request})
return Response(serializer.data)
class CategoryModelView(BaseViewMixin):
queryset = Category.objects.all()
multiple_serializer = CategoriesSerializer
single_serializer = SingleCategorySerializer
class DishesTypeModelView(BaseViewMixin):
queryset = DishesType.objects.all()
multiple_serializer = DishesTypesSerializer
single_serializer = SingleDishesTypeSerializer
class DishModelView(BaseViewMixin):
queryset = Dish.objects.all()
multiple_serializer = DishesSerializer
single_serializer = SingleDishSerializer
routes.py:
from .views import CategoryModelView, DishesTypeModelView, DishModelView
router = SimpleRouter()
router.register(r"categories", CategoryModelView)
router.register(r"dishes-types", DishesTypeModelView)
router.register(r"dishes", DishModelView)
urlpatterns = router.urls