Python Django Rest框架模型序列化程序-处理创建和更新
我的Django数据库中有一些模型。每个模型都是通过DRFAPI创建或更新的。因此,我有序列化程序(针对每个模型)来处理模型上的创建、更新和部分更新 处理的主要部分包括以下操作:Python Django Rest框架模型序列化程序-处理创建和更新,python,django,django-rest-framework,django-signals,Python,Django,Django Rest Framework,Django Signals,我的Django数据库中有一些模型。每个模型都是通过DRFAPI创建或更新的。因此,我有序列化程序(针对每个模型)来处理模型上的创建、更新和部分更新 处理的主要部分包括以下操作: def handle(): if created: model.owner = request.user model.other_fields = other fields model.save() else: model.other_fi
def handle():
if created:
model.owner = request.user
model.other_fields = other fields
model.save()
else:
model.other_fields = other fields
model.save()
此外,每当保存模型时,我需要使用request.user
创建日志条目
Log.objects.create(user=request.user, model=model, created=timezone.now())
我无法使用信号创建日志条目,因为post\u save
信号没有请求对象
我该怎么处理
- 我是否应该创建自定义信号,并在每次创建或更新模型时发送该信号
- 我是否应该调用序列化程序的
和create
中的函数来记录模型update
- 在序列化程序的创建和更新中调用函数以记录模型
- 避免使用信号。最好的方法是
选项1
class LogSerializerMixin(object):
def create_log(self):
//do logic over here
// get your request over here using self
// get your model using self.instance
Log.objects.create(user=request.user, model=model, created=timezone.now())
然后在序列化程序中
Serializer1(LogSerializerMixin, serializers.ModelSerializer):
def create(self):
// creation logic over here
self.create_log()
def update(self, data):
// update logic over here
self.create_log()
另一个序列化程序
Serializer2(LogSerializerMixin, serializers.ModelSerializer):
def create(self):
// creation logic over here
self.create_log()
def update(self, data):
// update logic over here
self.create_log()
选项2
- 重写保存模型方法,并在那里添加日志创建逻辑李>
- 避免使用信号。最好的方法是
选项1
- 在序列化程序的创建和更新中调用函数以记录模型
然后在序列化程序中class LogSerializerMixin(object): def create_log(self): //do logic over here // get your request over here using self // get your model using self.instance Log.objects.create(user=request.user, model=model, created=timezone.now())
另一个序列化程序Serializer1(LogSerializerMixin, serializers.ModelSerializer): def create(self): // creation logic over here self.create_log() def update(self, data): // update logic over here self.create_log()
选项2Serializer2(LogSerializerMixin, serializers.ModelSerializer): def create(self): // creation logic over here self.create_log() def update(self, data): // update logic over here self.create_log()
- 重写保存模型方法,并在那里添加日志创建逻辑李>