首页 > 解决方案 > 由 Django Autofield 生成的唯一和自定义 order_id

问题描述

我正在构建一个电子商务解决方案,为每个订单存储唯一和自定义的 order_id。唯一性是由于 1 个特定客户的订单分离。定制部分是为了区分不同的供应商。例如:

供应商名称 = foo

order1:  order_id = foo-20202907-001
order2:  order_id = foo-20202907-002
... 

供应商名称 =酒吧

order1:  order_id = bar-20202907-001
order2:  order_id = bar-20202907-002
...

order_is 的第一部分取决于供应商的名称。接下来,它将采用日期戳,最后它采用当天订单金额的自动递增字段。

我当前的订单模型:

class Order(models.Model):
    order_id = models.AutoField(primary_key=True, editable=False)
    customer_id = models.ForeignKey(User, on_delete=models.CASCADE)

Autofield 从 1 开始,每次下新时将其递增 1。当许多客户在不同的供应商处下不同的订单时,order_id 会变得非常混乱。为了我的支付系统中的唯一 ID,我需要类似上述 order_id 的东西。

我已经阅读了一些关于自定义唯一字段的文章,但我不知道什么是正确的方法。有没有办法做到这一点?

标签: djangomodel

解决方案


根据文档,似乎 Django 确实涵盖了这一点:

如果您想指定自定义主键,请在其中一个字段上指定 primary_key=True。如果 Django 看到你明确设置了 Field.primary_key,它不会添加自动 id 列

所以我认为这取决于你如何处理你的主键。如果您想要自定义格式,您可以在此处查找有关自定义保存方法的更多信息。


推荐阅读