0

我有两个模型,任务和动作。Action 有一个 ToOneField 到 Task ,称为 task ,它按预期工作。Task 有一个名为 actions 的属性,它返回工作正常的有序操作列表,但现在我想将其公开给 API,并将 Tastypie 作为 ToManyField。这是我目前的尝试:

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)

上面的代码将访问您的任务模型中的属性。dehydrate_actions如果您想以不同于tastepie 默认情况下的方式处理返回值,您可以定义一个方法。

但是,如果您想按照定义资源的方式执行此操作,您实际上并不想访问 Task 模型中的属性,您希望访问与操作反向关系的管理器,并且在 django 中默认情况下您将通过以下方式访问它调用 action_set。所以在你的任务资源中:

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

更多关于这个的文档。

您在代码中实际所做的是尝试访问反向关系,但访问的是一个不被美味派理解的属性。

于 2012-09-21T11:27:58.797 回答