PUT / PATCH操作后的Django REST Framework

时间:2014-10-28 21:51:38

标签: django django-rest-framework

我想在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工作。

2 个答案:

答案 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);