Я только что добавил новую модель, в которой хочу впервые использовать 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.
Зависит от вашего бэкенда, но для mysql UUIDField — это просто varchar
без каких-либо значений по умолчанию или дополнительных параметров. Так что нет, он не заполнит UUID для вас. Я думаю, что у Postgres есть несколько более сложных полей, но у меня нет прямого опыта в этом. Возможно, вы можете настроить что-то через phpmyadmin, но зачем вам использовать php, когда у вас есть Django, я не знаю. У вас есть Django admin
, который заполнит uuid, если вы добавите запись. Так использовать это? :)
Лично я бы настроил администратора Django и использовал его поверх phpmyadmin. docs.djangoproject.com/en/4.0/ref/contrib/admin
большое спасибо! работая с этим в течение полугода, всегда используйте панель phpmyadmin для заполнения некоторых тестовых записей.
Я понимаю :) Но для этого также можно использовать администратора django, или, если вы хотите использовать какую-то командную строку, вы можете использовать оболочку docs.djangoproject.com/en/4.0/ref/django-admin/#shell. Через который вы можете MQTTTable.objects.create(description='Test', clientID='foo', mastertopic='bar')
создавать объекты в БД. UUID имеет значение по умолчанию, поэтому его не нужно устанавливать.
Так что, только если я создам запись через Django, это автоматически вставит UUID? Есть ли способ сделать это?