【问题标题】:Extra Id in model模型中的额外 ID
【发布时间】:2019-04-20 13:33:06
【问题描述】:

我正在尝试构建属于某个项目的报告列表。每个项目可以有多个报告。每个报告都必须有唯一的 ID,即:1、2、3 等。我将所有报告存储在一个表中,这就是为什么我不能使用 Django 的 autoField,因为我已经将它用于主键。

class Cawreport(models.Model):
    caw_id = models.AutoField(primary_key=True)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    # report_id is unique for each project
    report_id = models.IntegerField(default=1)

为每个新报告增加 report_id 的最佳方法是什么?你会推荐什么? 您是否建议我为每个项目找到最大数量(report_id)?或者,我应该为每个项目“计算”report_id 条目并添加+1? 或者可能是完全不同的东西?

提前致谢

编辑: 我想要这个:项目 1:cawreport1、cawreport2 等…… 项目 2:cawreport1、cawreport2 等……

我想实现类似于开票软件的功能,在该软件中,您无法在不被发现的情况下删除和开票。我的客户的客户不希望我的客户能够删除一个 cawreport 并继续在序列中的下一个数字。实际上,他们通常会重复使用现有的 cawreport,而不是删除它并创建一个新的。

【问题讨论】:

  • 它们真的必须是连续的,还是唯一的要求是它们是唯一的?
  • 某些数据库(如 MySQL)不允许多个自动字段。此外,我真的不明白您为什么不使用caw_id 本身?为什么要添加一个额外的id 会导致更多的重复等情况?
  • 什么是caw_id不适合你使用?你想达到什么目的?
  • 每个项目可以有多个 cawreports。我将所有 cawreports 放在一个表中,我想要: 项目 1:cawreport1、cawreport2 等... 项目 2:cawreport1、cawreport2 等...

标签: python mysql django model


【解决方案1】:

主键对于数据库中的每条记录都是唯一的,因此当您添加与项目相关的新报告时,它会自动唯一。您可以轻松地在表格中对项目的报告进行排序。 您还可以在报告中添加日期字段以进行排序。

class Cawreport(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    datetime =  models.DateTimeField(auto_now=True)

因此不需要跟踪与项目相关的报告的最新id。

【讨论】:

  • 我想了很多。我的客户想要报告 ID,因为他们的客户希望看到他们不会用报告欺骗他们。与开票类似:税务机关不希望公司删除发票并继续使用下一个发票号。
【解决方案2】:

您可以使用UUIDField 代替IntegerField/AutoField

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多