Подтвердить что ты не робот

Как сделать целочисленное поле с автоинкрементом в 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?

4b9b3361

Ответ 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.

Все идет нормально.