16

我对美味派还很陌生,但它似乎是一个非常整洁的图书馆。不幸的是,我遇到了一些困难。

我有两个模型,以及与这些模型相关的两个资源:

class Container(models.Model):
    pass

class ContainerItem(models.Model):
    blog = models.ForeignKey('Container', related_name='items')

# For testing purposes only
class ContainerResource(ModelResource):
    class Meta:
        queryset = Container.objects.all()
        authorization = Authorization()

class ContainerItemResource(ModelResource):
    class Meta:
        queryset = ContainerItem.objects.all()
        authorization = Authorization()

Container通过 jQuery 创建了一个对象:

var data = JSON.stringify({});

$.ajax({
    url: 'http://localhost:8000/api/v1/container/',
    type: 'POST',
    contentType: 'application/json',
    data: data,
    dataType: 'json',
    processData: false
});

但是,当我去创建一个时ContainerItem,我得到这个错误:

container_id may not be NULL

所以我的问题是:当存在 ForeignKey 关系时如何创建新资源?

4

1 回答 1

23

ForeignKey 关系不会在 ModelResource 上自动表示。您必须指定:

blog = tastypie.fields.ForeignKey(ContainerResource, 'blog')

ContainerItemResource,然后您可以在发布容器项目时发布容器的资源uri。

var containeritemData = {"blog": "/api/v1/container/1/"}
$.ajax({
    url: 'http://localhost:8000/api/v1/containeritem/',
    type: 'POST',
    contentType: 'application/json',
    data: containeritemData,
    dataType: 'json',
    processData: false
});

有关更多信息,请查看以下链接:

在本节中,有一个如何创建基本资源的示例。在底部,他们提到关系字段不是通过自省自动创建的:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-resources

在这里,他们添加了一个创建关系字段的示例:

http://django-tastypie.readthedocs.org/en/latest/tutorial.html#creating-more-resources

这是关于添加反向关系的简介:

http://django-tastypie.readthedocs.org/en/latest/resources.html#reverse-relationships

如果您像阅读小说一样阅读它们,所有文档都很好,但是很难在其中找到特定的内容。

于 2012-10-09T16:45:52.617 回答