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

oro*_*aki 2 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'),)
Run Code Online (Sandbox Code Playgroud)

或者这个,分别是:

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')
Run Code Online (Sandbox Code Playgroud)

然后,当然我希望订单号代表帐户,因此可能是具有id:"chris"的帐户的样本订单号可以是"chris-41984"或类似的东西.你会为此创建一个模型方法,还是......?

Dan*_*aab 5

如果用户可以创建多个票证,则一对一字段不合适.其次,门票号码纯属武断,对吧?换句话说,它只需要是唯一的(我没有看到任何理由为什么它应该是你所说的到目前为止每个用户都是唯一的),所以你不妨只使用主键,除非你正在计划与其他一些数据存储集成.

所以你可以简单地说:

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)
Run Code Online (Sandbox Code Playgroud)

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

  • 丹尼尔是绝对正确的:除非你有一个非常令人信服的理由以其他方式做到这一点,只需使用Ticket.id并让它自动增加.这是聪明的一个让你陷入困境的情况之一. (2认同)