使用 Tastypie 发布关系数据时出错



我有两个模型:

class Order(models.Model):
    shop = ForeignKey(Shop)
    date_modified = DateTimeField(auto_now=True)
    class Meta:
        db_table = 't_order'
class Transaction(models.Model):
    order = ForeignKey('Order')
    quantity = IntegerField()
    item = ForeignKey(Item)
    date_modified = DateTimeField(auto_now=True)
    class Meta:
        db_table = 't_transaction'

和两个资源:

class OrderResource(ModelResource):
    shop = fields.ToOneField(ShopResource, 'shop')
    transactions = fields.ToManyField('TransactionResource','transaction_set', full=True)
    class Meta:
        queryset = Order.objects.all()
        resource_name = 'order'
        authentication = Authentication()
        authorization = Authorization()
        allowed_methods = ['post', 'get']
class TransactionResource(ModelResource):
        order = fields.ToOneField('OrderResource', 'order')
        item = fields.ToOneField('ItemResource', 'item')
    class Meta:
        queryset = Transaction.objects.all()
        resource_name = 'transaction'
        authentication = Authentication()
        authorization = Authorization()
        allowed_methods = ['post', 'get']

我正在将此数据发布到

http://127.0.0.1:5000/api/order/

{
 "shop": "/api/shop/1/",
 "transactions": [
        {
                "item": "/api/item/6/",
                "quantity" : 2
        }
    ]
}

我收到以下错误:

"error_message": "Transaction has no order.",

如果我删除

order = fields.ToOneField('OrderResource', 'order')

我得到的事务资源中的行:

"error_message": "(1048, "Column 'order_id' cannot be null")",

我错在哪里?

事务 ToManyField 定义中缺少 related_name 属性。而不是:

transactions = fields.ToManyField('ttests.api.TransactionResource','transaction_set', full=True)

您应该使用:

transactions = fields.ToManyField('ttests.api.TransactionResource','transaction_set', full=True, related_name='order')

然后,tastypie 不会期望您在发布交易时提供交易中的订单。

最新更新