我有models.py
:
from django.db import models
class Item(models.Model):
text = models.TextField()
class Note(models.Model):
text = models.TextField()
items = models.ManyToManyField(Item)
这是api.py
:
import tastypie
from tastypie.resources import ModelResource
from tastypie.api import Api
from main.models import Item, Note
class ItemResource(ModelResource):
class Meta:
resource_name = 'items'
queryset = Item.objects.all()
class NoteResource(ModelResource):
items = tastypie.fields.ToManyField(ItemResource, 'items', full=True)
class Meta:
resource_name = 'notes'
queryset = Note.objects.all()
api = Api(api_name='v1')
api.register(NoteResource())
我希望项目的唯一端点是:
/api/v1/notes/4/items
/api/v1/notes/4/items/2
没有/api/v1/items/?note=4
我一直在阅读Tastypie文档,但我没有找到任何相关信息。
This文档建议我在此处发布的网址表单。
我该如何做到这一点?
答案 0 :(得分:1)
使用Django REST Framework(后代,见OP的评论),子资源声明如下(简单示例):
class AddressSerializer(ModelSerializer):
"""
A serializer for ``Address``.
"""
class Meta(object):
model = Address
class OrderSerializer(ModelSerializer):
"""
A serializer for ``Order``.
"""
address = AddressSerializer()
class Meta(object):
model = Order
要开始使用,我强烈建议您只关注this tutorial。在自定义URL,自定义序列化输出等方面,它将为您提供所需的100%。
美味馅饼是一个伟大的项目,创造者Daniel Lindsley是一个非常聪明的人(我和他一起工作了一段时间),但就像其他所有伟大的项目一样,有人出现并吹掉了我们的袜子新事物learned from the good and bad parts of the existing framework。