Как сделать целочисленное поле с автоинкрементом в Django?
Я делаю модель Order
для корзины покупок, и мне нужно создать поле, которое будет автоматически увеличиваться при оформлении заказа:
class Order(models.Model):
cart = models.ForeignKey(Cart)
add_date = models.DateTimeField(auto_now_add=True)
order_number = models.IntegerField()
enable = models.BooleanField(default=True)
Как сделать IntegerField
?
Ответы
Ответ 1
В Джанго
1: будет поле по умолчанию с именем "id", которое имеет автоматическое увеличение.
2: Вы можете определить любое поле как поле автоинкремента, используя AutoField
поле.
class Order(models.Model):
auto_increment_id = models.AutoField(primary_key=True)
#you use primary_key = True if you do not want to use default field "id" given by django to your model
ДБ дизайн
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| core_order | CREATE TABLE 'core_order' (
'auto_increment_id' int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY ('auto_increment_id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
Если вы хотите использовать идентификатор django по умолчанию в качестве поля приращения.
class Order(models.Model):
dd_date = models.DateTimeField(auto_now_add=True)
ДБ дизайн
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| core_order | CREATE TABLE 'core_order' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'dd_date' datetime NOT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
Ответ 2
В django с каждой моделью вы получите поле id по умолчанию, которое автоматически увеличивается. Но все же, если вы вручную хотите использовать автоматическое увеличение. Вам просто нужно указать в вашей модели AutoField
.
class Author(models.Model):
author_id = models.AutoField(primary_key=True)
вы можете больше узнать о поле auto в django в Документация Django для AutoField
Ответ 3
class Belly(models.Model):
belly_id = models.AutoField(primary_key=True)
belly_name = models.CharField(max_length=50)
******** или же *******
class Belly(models.Model):
belly_name = models.CharField(max_length=50)
Разница в том, что:
Первая таблица имеет первичный ключ belly_id
(указанный как AutoField
), а вторая таблица имеет id
первичного ключа (неявно).
Я думаю, что нет необходимости использовать это напрямую; поле первичного ключа будет автоматически добавлено в вашу модель, если вы не укажете. В противном случае проверьте документацию Django для AutoField для получения дополнительной информации, связанной с AutoField
.
Ответ 4
Вы можете создать автозаполнение. Вот документация для того же самого
Пожалуйста, помните, что Django не позволит иметь более одного AutoField в модели. В вашей модели у вас уже есть один для вашего первичного ключа (по умолчанию). Поэтому вам придется переопределить метод сохранения модели и, вероятно, получить последнюю вставленную запись из таблицы, соответственно увеличить счетчик и добавить новую запись.
Пожалуйста, сделайте этот поток кода безопасным, потому что в случае нескольких запросов вы можете попытаться вставить одно и то же значение для разных новых записей.
Ответ 5
Вы можете использовать первичный ключ по умолчанию (id), который автоматически увеличивается.
Примечание. Когда вы используете первый проект, используйте поле по умолчанию (id) в качестве первичного ключа, инициализируйте объект, указав имена столбцов.
например.
class User(models.Model):
user_name = models.CharField(max_length = 100)
затем инициализируйте,
user = User(user_name="XYZ")
если вы выполните инициализацию следующим образом:
user = User("XYZ")
тогда python попытается установить id = "XYZ", который даст вам ошибку в типе данных.
Ответ 6
Что мне было нужно: номер документа с фиксированным числом целых чисел, который бы также действовал как AutoField
.
Мои поиски охватили меня повсюду. эта страница.
Наконец я сделал что-то вроде этого:
Я создал таблицу с полем DocuNumber
как IntegerField с foll. атрибуты:
-
max_length=6
-
primary_key=True
-
unique=True
-
default=100000
Значение max_length
все, что требуется (и, следовательно, соответствующее default=
значение).
При создании указанной модели выдается предупреждение, которое я мог игнорировать.
После этого создал документ (фиктивный), откуда, как и ожидалось, имел целочисленное значение поля 100000.
Впоследствии изменили поле ключа модели следующим образом:
- Изменен тип поля как:
AutoField
-
max_length
атрибутов max_length
и default
- Сохранен атрибут
primary_key = True
Следующий созданный (требуемый документ) имел значение 100001, а последующие числа увеличивались на 1.
Все идет нормально.