16

私はまだtastypieに慣れていませんが、本当にきちんとしたライブラリのようです. 残念ながら、私はそれでいくつかの問題を抱えています。

2 つのモデルと、それらのモデルに関連付けられた 2 つのリソースがあります。

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()

ContainerjQuery 経由でオブジェクトを作成しました。

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 に答える