如何在 Tastypie 中声明子资源



我有这个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 文档,但我没有找到任何关于此的信息。

本文档推荐我在此处发布的 URL 表单。

我怎样才能做到这一点?

使用 Django REST 框架(后代,参见 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

首先,我强烈建议您简单地按照本教程进行操作。它将在自定义 URL、自定义序列化输出等方面为您提供 100% 所需的内容。

美味馅饼是一个伟大的项目,创造者丹尼尔·林兹利(Daniel Lindsley)是一个非常聪明的人(我和他一起工作了一段时间),但就像其他伟大的项目一样,有人来了,用一些新的东西来吹我们的袜子,这些东西从现有框架的好坏部分学到

了东西。

最新更新