Я новичок в Django Rest Framework и изо всех сил стараюсь, чтобы мои сериализаторы работали правильно для отношений между двумя двумя моделями. Я попытался уменьшить мою настройку настолько, насколько это возможно, но я все еще не могу понять, как она должна работать. Я пытаюсь использовать HyperlinkedModelSerializer так (от docs), «что он использует гиперссылки для представления отношений». Когда я пытаюсь посетить URL для либо списка или Детальный вид для {модели X} на тестовом сервере, я получаю:Как сделать HyperlinkedModelSerializer в Django Rest Framework работать для иностранных ключей?
«Не удалось разрешить URL для гипертекстовых отношений, используя имя вида «{модель Y} - деталь». Возможно, вы не смогли включить связанную модель в свой API или неправильно настроили атрибут
lookup_field
на это поле. '
Что я делаю неправильно?
Мои модели:
from django.db import models
class Project(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
class ProjectPhoto(models.Model):
project = models.ForeignKey(
Project, related_name='photos', on_delete=models.CASCADE
)
image = models.ImageField()
caption = models.CharField(max_length=100)
date_added = models.DateTimeField(auto_now_add=True)
Мои сериализаторов
class ProjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Project
fields = ('name', 'description', 'photos')
class ProjectPhotoSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ProjectPhoto
fields = ('image', 'caption', 'date_added', 'project'))
Мои взгляды:
from rest_framework import viewsets
from projects.models import Project, ProjectPhoto
from projects.serializers import ProjectSerializer, ProjectPhotoSerializer
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.all().order_by('name')
serializer_class = ProjectSerializer
class ProjectPhotoViewSet(viewsets.ModelViewSet):
queryset = ProjectPhoto.objects.all().order_by('date_added')
serializer_class = ProjectPhotoSerializer
EDIT:
Мой URL s:
from django.conf.urls import url, include
from rest_framework import routers
from projects import views
router = routers.DefaultRouter()
router.register(r'^projects', views.ProjectViewSet)
router.register(r'^project-photos', views.ProjectPhotoViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
]
они затем добавляются в мой основной файл urls.py приложения. Я не думаю, что это проблема, как если бы я изменил сериализатор на ModelSerializer
, тогда все будет хорошо.
где ист ваш urls.py? Вы должны иметь оба вида, подключенные к вашему маршрутизатору URL. –
Спасибо за быстрый комментарий. Я добавил файл urls, хотя думаю, что проблема, вероятно, не существует (см. Править) – lac
Я не думаю, что вы должны иметь эти '^' в префиксах маршрута. По крайней мере, это не в документах. 'router.register ('foo', views.FooViewSet)' http://www.django-rest-framework.org/api-guide/routers/ –