我有一个应用程序可以让人们创建票证,并且使用我的应用程序的每个帐户所有者都可以创建票证。
首先,您认为每个帐户应该是唯一的吗?或者,它应该是完全独特的吗?
像这样:
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/