Проверка на self.pk == None
это не достаточно , чтобы определить , если объект будет вставлен или обновлены в базе данных.
Django O / RM имеет особенно неприятный хак, который в основном должен проверить, есть ли что-то в позиции PK и, если это так, сделать UPDATE, в противном случае сделать INSERT (это оптимизируется до INSERT, если PK - None).
Причина, по которой он должен это делать, заключается в том, что вам разрешено устанавливать PK при создании объекта. Хотя это редко встречается, когда у вас есть столбец последовательности для первичного ключа, это не относится к другим типам полей первичного ключа.
Если вы действительно хотите знать, вы должны делать то, что делает O / RM, и искать в базе данных.
Конечно, в вашем коде есть конкретный случай, и вполне вероятно, что он self.pk == None
говорит вам все, что вам нужно знать, но это не общее решение.
UUIDField pk