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

Django Rest Framework ModelSerializers - Handling create and update

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

我该如何处理?

避免使用信号。最好的方法是

选项 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

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