【发布时间】:2017-08-03 22:30:30
【问题描述】:
models.py
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField(blank=True)
class Publication(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateField(null=True, blank=True)
author = models.ManyToManyField(Author)
serializers.py
class AuthorSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Author
fields = ('first_name', 'last_name', 'email')
class PublicationSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Publication
fields = ('title', 'pub_date', 'author')
urls.py
router = routers.DefaultRouter()
router.register(r'authors', views.AuthorViewSet)
router.register(r'publications', views.PublicationViewSet)
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^api/', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
views.py
class AuthorViewSet(viewsets.ModelViewSet):
queryset = Author.objects.all().order_by('-first_name')
serializer_class = AuthorSerializer
class PublicationViewSet(viewsets.ModelViewSet):
queryset = Publication.objects.all()
serializer_class = PublicationSerializer
我想要什么
如您所见,我的两个模型(作者和出版物)以多对多关系连接。我想要的是当我转到api/authors/[id]/publications 时能够访问特定作者的所有出版物。我该怎么做?
【问题讨论】:
-
Publication.objects.filter(author__id=<id>) -
请更具体。我把那个代码放在哪里?我还需要添加什么才能使其正常工作?
-
在您的 API 视图中,您的函数可能类似于
def viewFunc(request, author_id)。您需要执行该查询,该查询将返回作者贡献的所有出版物的列表。 -
实际上我的views.py 文件中只有两个类。我编辑了我的消息以显示内容。如何调整我的代码以将您的代码与函数一起使用?
-
看起来你应该可以编写一个自定义的
list函数来返回你想要的结果:django-rest-framework.org/api-guide/viewsets
标签: python django rest django-rest-framework