Управление 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 отличаются.
Есть ли какое-нибудь решение моей проблемы?