django tastypie - 如何显示子对象的链接

时间:2015-01-26 23:34:24

标签: django django-models tastypie

我有两个模型类:Blueprint和Workload。

单个蓝图通常是多个工作负载的父级。

我在models.py中定义了它们,如下所示:

class Blueprint(models.Model):
    name = models.CharField(max_length=120)
    description = models.TextField()

    class Meta:
        ordering = ["name", ]


class Workload(models.Model):
    blueprint = models.ForeignKey(Blueprint)
    name = models.CharField(max_length=120)
    description = models.TextField()
    image = models.CharField(max_length=120)
    flavor = models.CharField(max_length=120)

    class Meta:
        ordering = ["name", ]

我的api.py目前看起来像这样:

class WorkloadResource(ModelResource):
    def obj_create(self, bundle, request=None, **kwargs):
        return super(WorkloadResource, self).obj_create(bundle, request)

    def obj_update(self, bundle, request=None, **kwargs):

        workload = Workload.objects.get(id=kwargs.get("pk"))
        workload.description = bundle.data.get("description")
        workload.name = bundle.data.get("name")
        workload.image = bundle.data.get("image")
        workload.flavor = bundle.data.get("flavor")
        workload.save()

        def obj_delete(self, bundle, **kwargs):

            return super(WorkloadResource, self).obj_delete(bundle)

        def determine_format(self, request):
            return 'application/json'

    class Meta:
        queryset = Workload.objects.all()
        resource_name = 'workload'
        authorization=Authorization()


class BlueprintResource(ModelResource):
    def obj_create(self, bundle, request=None, **kwargs):
        return super(BlueprintResource, self).obj_create(bundle, request)

    def obj_update(self, bundle, request=None, **kwargs):

        blueprint = Blueprint.objects.get(id=kwargs.get("pk"))
        blueprint.description = bundle.data.get("description")
        blueprint.name = bundle.data.get("name")
        blueprint.workloads = bundle.data.get("workloads")
        blueprint.save()

    def obj_delete(self, bundle, **kwargs):

        return super(BlueprintResource, self).obj_delete(bundle)

    class Meta:
        queryset = Blueprint.objects.all()
        resource_name = 'blueprint'
        authorization = Authorization()

当我对/ api / blueprint /运行GET方法时,我希望从api获取Workload链接URL,但是,当我运行时:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://127.0.0.1:8000/api/blueprint/1/
我得到的只有:

{"description": "First Blueprint", "id": 1, "name": "Blueprint 1", "resource_uri": "/api/blueprint/1/"}

并且没有提及子Workload网址。

为了获得这个附加链接,指向Workload子项的位置,我需要做出哪些更改?

0 个答案:

没有答案