我的Django数据库中有一些模型。通过DRF API创建或更新每个模型。因此,我有序列化程序(针对每个模型)处理模型上的创建,更新和partial_update
。
处理的主要部分包括以下行动:
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_save
信号没有请求对象。
我该如何处理?
create
和update
中调用函数来记录模型吗?答案 0 :(得分:4)
避免使用信号。最好的方法是
选项1
但是,使用mixin来做。
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