Python Tastypie-嵌套资源将更新,而不是在POST上创建

Python Tastypie-嵌套资源将更新,而不是在POST上创建,python,django,rest,tastypie,Python,Django,Rest,Tastypie,我试图发布一个基本上由子资源列表组成的资源。以下是我的资源: class MovementResource(ModelResource): transactions = fields.ToManyField('stock.api.TransactionResource', 'transaction_set', related_name='movement', full=True) class Meta: queryset = Movement.o

我试图发布一个基本上由子资源列表组成的资源。以下是我的资源:

class MovementResource(ModelResource):
    transactions = fields.ToManyField('stock.api.TransactionResource',
        'transaction_set', related_name='movement', full=True)

    class Meta:
        queryset = Movement.objects.all()
        resource_name = 'movement'
        always_return_data = True
        authorization = Authorization()

class TransactionResource(ModelResource):
    movement = fields.ToOneField(MovementResource, 'movement')
    product = fields.ToOneField(ProductResource, 'product', full=True)

    class Meta:
        queryset = Transaction.objects.all()
        resource_name = 'transaction'
        authorization = Authorization()
这表示库存中各种产品的移动。移动表单只是一个内联线列表,每个事务对应一个内联线。它根本不使用django表单

我的问题是,当试图发布指定要创建的事务列表的移动时,我发现不是插入新事务,而是更新现有事务。这是POST请求的JSON,表示只有一个事务的移动:

{
    'transactions': [
        {
            'product': '/api/v1/product/3/',
            'quantity': '1'
        }
    ]
}
响应JSON显示移动已经创建,但事务具有以前存在的id,并且具有相同的产品和数量。此事务对象中的移动FK已更新为指向新创建的移动。答复数据:

{
    'date': '2013-02-07 ···',
    'id': '66',
    'resource_uri': '/api/v1/movement/66/',
    'transactions': [
        {
            'date': '2013-01-30 ···', # Should be the same as parent movement's date
            'id': '30',
            'movement': '/api/v1/movement/66/',
            'product': { ··· product resource data ··· },
            'quantity': '1',
            'resource_uri': '/api/v1/transaction/30/',
        }
    ]
}
我错过什么了吗?Tastypie不应该创建嵌套资源作为列表端点的POST吗?我尝试过使用ForeignKey和ToOneField来访问MovementResource,看看是否会有什么不同,但没有成功。(实际上我找不到两者之间的区别。)

谢谢

我也有同样的问题

经过数小时的努力,我发现了一种解决方法,可以强制发布相关资源:如果为嵌套资源的主键传递
null
值,那么tastypie将发布一个新的,而不是更新现有的

如果您发布以下内容,您应该会得到您想要的行为:

{
   'transactions': [
        {
            'product': '/api/v1/product/3/',
            'quantity': '1',
            'id': null
        }
   ]
}