Перевірка на self.pk == None
це НЕ досить , щоб визначити , якщо об'єкт буде вставлений або оновлені в базі даних.
Django O / RM має особливо неприємний злом, який в основному полягає у тому, щоб перевірити, чи є щось на позиції PK, і якщо це зробити UPDATE, в іншому випадку зробіть INSERT (це оптимізується до ВСТАВКИ, якщо PK немає).
Причина, чому він повинен це робити, полягає в тому, що вам дозволяється встановлювати ПК при створенні об'єкта. Хоча це не часто, коли у вас є стовпець послідовності для основного ключа, це не застосовується для інших типів поля первинного ключа.
Якщо ви дійсно хочете знати, ви повинні робити те, що робить O / RM, і шукати в базі даних.
Звичайно, у вашому коді є конкретний випадок, і це, ймовірно, self.pk == None
говорить про все, що вам потрібно знати, але це не загальне рішення.
UUIDField pk