Django Rest Framework ModelSerializers - 处理创建和更新

时间:2016-10-25 16:51:34

标签: python django django-rest-framework django-signals

我的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信号没有请求对象。

我该如何处理?

  • 我应该创建自定义信号并在每次创建或更新模型时发送它吗?
  • 我应该在序列化程序createupdate中调用函数来记录模型吗?

1 个答案:

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

  • 重写保存模型方法并在那里添加日志创建逻辑。