0

Task と Action の 2 つのモデルがあります。アクションには、期待どおりに機能するタスクと呼ばれるタスクへの ToOneField があります。タスクにはアクションの順序付けられたリストを返すアクションというプロパティがありますが、ToManyField として Tastypie を使用して API に公開したいと考えています。これが私の現在の試みです:

class TaskResource(ModelResource):
    actions = fields.ToManyField('ActionResource', 'actions')

    class Meta:
        queryset = Task.objects.all()
        resource_name = 'task'

class ActionResource(ModelResource):
    task = fields.ToOneField(TaskResource, 'task')

    class Meta:
        queryset = Action.objects.all()
        resource_name = 'action'

これは以下を出力します:

"error_message": "'list' object has no attribute 'all'"

大幅な再設計を伴わないアイデアを持っている人はいますか?

4

1 に答える 1

2

プロパティを返したい場合は、次のように Task リソースにフィールドを定義する必要があります。

actions = CharField('actions', readonly=True)

上記のコードは、Task モデルのプロパティにアクセスします。dehydrate_actions戻り値をtastypieがデフォルトで行うのとは異なる方法で処理したい場合は、メソッドを定義できます。

ただし、タスクモデルのプロパティに実際にアクセスしたくないリソースを定義した方法でそれを行いたい場合は、アクションと逆の関係のマネージャーにアクセスし、django ではデフォルトでアクセスします。 action_set を呼び出します。したがって、Task リソースでは次のようになります。

actions = fields.ToManyField('ActionResource', 'action_set')

詳細については、ドキュメントを参照してください。

コードで実際に行ったことは、逆の関係にアクセスしようとしましたが、代わりに Tastypie によって理解されないプロパティにアクセスすることでした。

于 2012-09-21T11:27:58.797 に答える