是否有可能定义一个增加的字段,但以字母开头?所以值应该是:S123,S124,S125。
我想使用id字段,但有些原因我希望将它作为CharField。
作为我可以使用的解决方法:
id = models.CharField(max_length = 32, primary_key = True)
并重新定义了save方法,所以我总是预先计算它的值,但是这不是一个强大而不是“真正的”解决方案,而且我的解决方案在计算时也会太慢。
我的问题有适当的解决方案吗?
Django:1.9.2 Python:3.4.2
答案 0 :(得分:2)
我认为您不应该手动定义主键。 Django通常使用关系数据库来构建应用程序,这意味着它将依赖于join
其他表的某些关键字段来在需要时进行查找。拥有像S123
这样的主键会使其难以维护,因为您需要在其他表中存储与引用相同的内容。
我建议分别存储字母部分和数字。您可以使用创建的默认id
字段django作为数字部分,并创建自己的字段来存储字母部分。然后,您将使用属性方法返回您想要的值。大致是:
class Foo(models.Model):
letter = models.CharField(max_length=1)
@property
def symbol(self):
return '%s%s' % (self.letter, self.id)
然后你可以这样做:
foo = Foo.objects.create(letter='S')
print foo.symbol # this would print S1, S2, etc.
如果你不知道,这里是对@property in python的解释。