Управление UUID в качестве PrimaryKey в Django

Я хочу видеть в журналах всю историю объекта (начиная с запроса на создание). Поэтому в промежуточном ПО я присваиваю UUID каждому запросу. Если это запрос на создание объекта, то я хочу, чтобы UUID запроса стал ID объекта. Я делаю примерно следующее:

# middleware.py

<...>

    def __call__(self, request):
        id = uuid.uuid4()
        request.id = id
        self.log_request(request)
        response = self.get_response(request)
        self.log_response(response)
        return response

    # then I insert the UUID into the request body, but it doesn't seem to be necessary

<...>
# models.py

class Client(models.Model):
    id = models.UUIDField(primary_key=True, editable=False)
    phone = models.CharField(max_length=11, unique=True)
    operator_code = models.CharField(max_length=3, db_index=True, blank=True)
    
    def save(self, *args, **kwargs):
        if not self.id:
            self.id = kwargs.get("id", uuid.uuid4())
        self.operator_code = self.phone[1:4]
        super().save(*args, **kwargs)

Но это не работает


# app.log

api.middleware INFO 2024-02-07 11:34:19,641 middleware API Request: POST /api/v1/clients/, 4b3e7620-cbb8-47b6-88b5-cb8111b3536b Body: {'phone': '01234567890', 'id': '4b3e7620-cbb8-47b6-88b5-cb8111b3536b'}, Headers: {...}
api.middleware INFO 2024-02-07 11:34:19,657 middleware API Response: Status Code: 201, Body: {'id': '0ecbe66a-e6f3-452c-9ce0-ecd042bbe1e3', 'phone': '01234567890', 'operator_code': '123'}, Headers: {...}

Вы видите, что UUID отличаются.

Есть ли какое-нибудь решение моей проблемы?

Вернуться на верх