Django:如何自动递增可以具有多个相同值的字段

标签 django django-models

我有一个应用程序可以让人们创建票证,并且使用我的应用程序的每个帐户所有者都可以创建票证。

首先,您认为每个帐户应该是唯一的吗?或者,它应该是完全独特的吗?

像这样:

class Ticket(models.Model):
    """
    An ticket created by an Account holder.
    """
    account = models.OneToOneField('Account')
    number = models.CharField(max_length=20, verbose_name='Ticket Number')

    class Meta:
        unique_together = (('account', 'number'),)

或者分别是:

class Ticket(models.Model):
    """
    An ticket created by an Account holder.
    """
    account = models.OneToOneField('Account')
    number = models.CharField(unique=True, max_length=20, verbose_name='Ticket Number')

然后,我当然希望订单号代表帐户,因此 ID 为“chris”的帐户的示例订单号可能是“chris-41984”或类似的名称。您会为此创建一个模型方法,还是......?

最佳答案

如果用户可以创建多个票证,则一对一字段不合适。其次,票号纯粹是任意的,对吗?换句话说,它只需要是唯一的(从你到目前为止所说的来看,我看不出为什么每个用户应该是唯一的),所以你最好只使用主键,除非你打算与其他一些数据存储集成。

所以你可以简单地说:

class Ticket(models.Model):
    account = models.ForiegnKey(Account)

    # "ticket number" is just ticket.id.
    # if you don't like that, then say:
    #number = models.CharField(primary_key=True)

请注意,如果取消注释 number 定义,则需要在创建模型实例时指定它 - 主键不能为 None。或者,重写 save 方法以根据您的要求自动生成工单 number 字段。

关于Django:如何自动递增可以具有多个相同值的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961944/

相关文章:

Django - 带有控制数据的错误模型

django - Django 1.7 中更长的用户名

python - 如何使用表单元字段中未指定的字段进行 POST?

Django:显示模板中相关项目的总和

python-3.x - 系统找不到指定的路径: error returned when changing field in admin page Django

django - 在 Django 中将计算值从 View 保存到模型

python - Django : Type Mismatch Error in models. py

python - Django 远程用户认证和安全

django - 查询 django 模型以查找当月最好的公司销售