Tôi không thể tìm thấy bất kỳ thông tin nào về cách đạt được điều này trong hướng dẫn tại trang web khung REST Django và tôi chưa quản lý để tìm thấy nó trong tài liệu, mặc dù tôi chắc chắn rằng nó có một nơi nào đó.Cách triển khai phân cấp tài nguyên (ví dụ:/cha mẹ/<id>/trẻ em) trong Khung REST Django
Tôi muốn issues
là nguồn phụ huynh và pages
để trở nên con cái để /issues/1/pages
trả về tất cả các trang web có issue_id
của 1.
Có cách nào tốt để đạt được điều này sử dụng các khung nhìn dựa lớp chung chung?
Đây là những gì tôi có cho đến nay.
restAPI/urls.py:
from django.conf.urls import patterns, url
from rest_framework.urlpatterns import format_suffix_patterns
from restAPI import views
urlpatterns = patterns('',
url(r'^issues/$', views.IssueList.as_view()),
url(r'^issues/(?P<pk>[0-9]+)/$', views.IssueDetail.as_view()),
url(r'^issues/(?P<issue_id>[0-9]+)/pages/$', views.PageList.as_view()),
url(r'^pages/(?P<pk>[0-9]+)/$', views.PageDetail.as_view()),
)
urlpatterns = format_suffix_patterns(urlpatterns)
restAPI/models.py:
from django.db import models
class Issue(models.Model):
created = models.DateTimeField(auto_now_add=True)
revision = models.IntegerField(default = 1)
issue_date = models.DateTimeField(auto_now_add=True)
issue_image_url = models.CharField(max_length=100)
class Page(models.Model):
created = models.DateTimeField(auto_now_add=True)
page_number = models.IntegerField()
standard_page_url = models.CharField(max_length=100, default='')
large_page_url = models.CharField(max_length=100, default='')
thumbnail_url = models.CharField(max_length=100, default='')
issue = models.ForeignKey(Issue, related_name="pages")
class Meta:
ordering = ('page_number',)
restAPI/serializers.py:
from rest_framework import serializers
from restAPI.models import Page, Issue
class IssueSerializer(serializers.ModelSerializer):
class Meta:
model = Issue
fields = ('id', 'created', 'revision', 'issue_date', 'issue_image_url')
class PageSerializer(serializers.ModelSerializer):
class Meta:
model = Page
fields = ('id', 'created', 'page_number', 'standard_page_url', 'large_page_url', 'thumbnail_url')
restAPI/views.py:
from restAPI.models import Page, Issue
from restAPI.serializers import PageSerializer, IssueSerializer
from rest_framework import mixins
from rest_framework import generics
class IssueList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Issue.objects.all()
serializer_class = IssueSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class IssueDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Issue.objects.all()
serializer_class = IssueSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
class PageList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Page.objects.all()
serializer_class = PageSerializer
def get(self, request, *args, **kwargs):
print kwargs
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class PageDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Page.objects.all()
serializer_class = PageSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
Làm thế nào tôi có thể thực hiện điều này loại mối quan hệ giữa issues
và pages
?
Tôi đã thêm 'def get_queryset (self): issue_id = self.kwargs ['issue_id'] trả về Page.objects.filter (issue_id = issue_id)' thành 'PageList' và bây giờ GET làm việc cho' issue//pages' . Bây giờ tôi chỉ cần tìm ra cách để đăng bài. –
Tôi đã thêm 'def pre_save (self, obj): obj.issue_id = self.kwargs ['issue_id']' to 'PageList' và bây giờ POST cũng hoạt động. Truy vấn các trang từ một vấn đề không tồn tại sẽ trả lại kết quả rỗng hơn là 404 không tìm thấy. Nếu có ai biết cách tốt hơn để làm điều này tôi rất thích nghe về nó. –