У меня есть приложение API отдыха с пользователями и книгами с этой структурой URL (без маршрутизаторов):
urlpatterns = [
path('', UserList.as_view(), name="user-list"),
path('<uuid:id>/', UserDetail.as_view(), name="user-detail"),
path('<uuid:id>/books/', BookList.as_view(), name="book-list"),
path('<uuid:id>/books/<int:book_id>/', BookDetail.as_view(), name="book-detail"),
]
Сериализаторы:
class UserSerializer(serializers.HyperlinkedModelSerializer):
books = serializers.HyperlinkedRelatedField(
many = True,
queryset = Book.objects.all(),
view_name = "book-detail",
)
И общие представления:
class BookList(generics.ListAPIView):
serializer_class = BookSerializer
queryset = Book.objects.all()
lookup_field = 'book_id'
class BookDetail(generics.RetrieveAPIView):
serializer_class = BookSerializer
queryset = Book.objects.all()
lookup_field = 'book_id'
Это не работает - я получаю сообщение об ошибке:
Could not resolve URL for hyperlinked relationship using view name "book-detail"
Я пытался изменить lookup_field
и view-name
, но я даже не уверен, как решить эту проблему.
Я посмотрел на drf-nested-router, но я надеюсь найти решение без переключения на маршрутизаторы, если это вообще возможно.
Обновление:
I 'используя book_id
в качестве моего первичного ключа в модели:
class Book(models.Model):
book_id = models.AutoField(primary_key=True)
owner = models.ForeignKey('users.ColossusUser', related_name="books", on_delete=models.CASCADE)