Я хочу построить простой API и взял Django REST Framework (DRF). Я хочу, чтобы minimize path nesting, как Tom Christie (автор DRF) указал на меня.Как построить вложенный маршрут с помощью Django REST Framework?
Есть две модели: Статья и Комментарий.
Для них я хочу построить следующие пути API (с создания [C], считывания [R] и обновление [U] доступа):
/ [R]
/articles/ [R]
/articles/:id/ [R]
/articles/:id/comments [R]
/comments/ [CRU]
/comments/:id [R]
models.py:
class Article(models.Model):
text = models.CharField(max_length=140, blank=False)
recorded_at = models.DateTimeField(blank=False)
modified_at = models.DateTimeField(auto_now_add=True)
class Comment(models.Model):
message = models.CharField(max_length=140, blank=False)
created_at = models.DateTimeField(auto_now_add=True)
modified_at = models.DateTimeField(auto_now_add=True)
article = models.ForeignKey('Article', default=1, related_name='article')
serializers.py:
class ArticleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Article
class CommentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Comment
views.py:
class ArticleViewSet(mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
class CommentViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
urls.py:
router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
router.register(r'comments', CommentViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
)
Путь на рабочем уровне корня:
/ [R]
/articles/ [R]
/articles/:id/ [R]
/comments/ [CRU]
/comments/:id [R]
Однако вложенный путь возвращает 404.
/articles/:id/comments [R]
Путь, 'статьи /: идентификатор/comments' делает, когда я удаляю' related_name = 'article'' и использовать 'сериализатора = CommentSerializer (комментарии, контекст = {' запрос ': запрос}, много = True) '. Теперь только паническое слово указывает неправильное имя: 'Article' вместо' Comment'. – JJD
«Теперь только сухарь говорит о неправильном имени: Article вместо комментария». Это будет оставаться таким же, если вы не захотите переопределить шаблон (я бы особо не рекомендовал этого). Я бы, вероятно, просто жил с ним в этот момент. –
Теперь, когда вы говорите, что я помню, что где-то читал, что подробные представления не отображают правильный заголовок объекта. Спасибо. – JJD