我想在api的PUT / PATCH过程完成后做一些动作。
我的API更新了一个模型的某些值,但在这些更新之后,我想更新另一个模型值,并获取API发送的信息。
例如:
class Model1(models.Model):
name = models.CharField(max_length=140)
qty = models.IntegerField(default=0)
class Model2(models.Model):
val = models.CharField(max_length=15)
我有这个模型,因此,我的API使用PATCH调用更新了Model1.qty值。然后我想用我的API的PATCH调用数据更新Model2.val值实际上等于Model1.qty值
我不确切知道如何做到这一点,但我认为我应该覆盖"更新"方法
def update(self, request, *args, **kwargs):
...??
def partial_update(self, request, *args, **kwargs):
...??
任何想法?
注意我使用HyperlinkedModelSerializers,ModelViewSets和Routers来使我的API工作。
答案 0 :(得分:0)
视图上的post_save
方法正是因为这个原因而存在的。 Django REST框架文档doesn't cover it well,但它是一个用两个参数调用的钩子obj
(已保存的对象)和created
(POST为POST / PUT-as-创建,PUT-as-update / PATCH为False。
您可以使用self.request.DATA
访问已发送的数据,这样您就可以修改已保存的对象以满足您的需求。
答案 1 :(得分:0)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var thirdPartySchema = new Schema({
_id: {type: Schema.Types.ObjectId},
type: {type: String},
name: {type: String},
vat: {type: String},
corpoPhone: {type: String},
corpoMail: {type: String},
corpoWeb: {type: String},
activityNumber: {type: String},
addresses: {type: Array},
contacts: [{type: Schema.Types.ObjectId, ref: 'Contact'}], // <-- ARRAY OF ObjectIds /!\
});
module.exports = mongoose.model('Thirdparty', thirdPartySchema);
现在(> 2.x)已过时(https://www.django-rest-framework.org/api-guide/generic-views/)。可以挂接到通用视图的新功能是:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var contactSchema = new Schema({
_id: {type: Schema.Types.ObjectId},
title: {type: String},
role: {type: String},
firstName: {type: String},
lastName: {type: String},
phone: {type: String},
mobile: {type: String},
email: {type: String}
});
module.exports = mongoose.model('Contact', contactSchema);