如何在Django中生成一个自动递增的整数字段?

2024-05-10 01:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为购物车制作一个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自动递增?


Tags: 订单模型addtruedatemodelmodelsorder
3条回答

在django中,对于每个模型,默认情况下都会得到自动递增的id字段。但如果你想手动使用自动增量的话。您只需要在模型中指定AutoField

class Author(models.Model):
    author_id = models.AutoField(primary_key=True)

您可以在Django Documentation for AutoField中阅读有关django中auto字段的更多信息

在Django

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的默认id作为增量字段

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 |
+-------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
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(隐式)。

我认为不需要直接使用它;如果您不指定,主键字段将自动添加到您的模型中。否则 有关AutoField的更多详细信息,请查看Django Documentation for AutoField

相关问题 更多 >