Поле UUID в Django не автосоздается с новой записью
Я только что добавил новую модель, в которой впервые хочу использовать UUID. Я запускаю django 3.1.3 на python 3.8.10.
Нашел несколько вопросов об этом и уверен, что сделал все в соответствии с этими предложениями. Однако, когда я добавляю запись в эту модель (в веб-поверхности phpmyadmin), UUID не добавляется, он просто остается пустым. Однако когда я создаю другую модель, я получаю ошибку, что поле UUID не может быть таким же, как в другом месте (оба пустые), что означает, что по крайней мере уникальность=True работает.
Другой момент: когда я создаю поле с помощью VSCode, обычно имена полей автоматически заполняются, однако в данном случае это не так. Подумал, что это может дать вам подсказку, что происходит.
Моя модель выглядит следующим образом:
from django.db import models
import uuid
class MQTTTable(models.Model):
uuid = models.UUIDField(primary_key = True, default = uuid.uuid4, editable = False, unique = True)
description = models.CharField(max_length= 100, default = None)
clientID = models.CharField(max_length = 50, default = None)
mastertopic = models.CharField(max_length = 200, default = None)
измените default = uuid.uuid4 на default = uuid.uuid4()
default = uuid.uuid4 - это умолчание Django ORM, это не то, что база данных будет делать за вас, как автоматический инкремент для ID. Поэтому если вы добавляете запись через phpmyadmin, он не будет устанавливать поле uuid.
Для заполнения полей существующих записей вам потребуется выполнить миграцию, подобную этой. Посетите эту страницу, чтобы узнать, как это сделать. При создании новых объектов поле автоматически заполняется с помощью способа python. Спасибо Миграции, которые добавляют уникальные поля
Вы можете посетить этот вопрос, который может помочь вам с ответом: Автоматически заполнять существующие записи базы данных UUID в Django
В принципе, вы не можете добавить запись в админпанель php и ожидать, что django добавит UUID, потому что он задается Django, а не базой данных. Вы можете попробовать реализовать функцию в файле model.py и сериализовать ее как источник Charfield, однако в этом случае вам понадобится django rest framework