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

时间:2009-12-25 21:00:13

标签: 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”或类似的东西。你会为此创建一个模型方法,还是......?

1 个答案:

答案 0 :(得分: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)

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