我在谷歌应用引擎上使用 django nonrel/djangoappengine。不能直接指定复合主键。但是,应该可以模仿这种行为。我想知道什么是最好的方法。
问题
考虑以下数据模型
class AccumuatedSales(models.Model):
salesman = models.ForeignKey(Salesman)
year = models.Postiveinteger()
totalSales = models.PositiveInteger()
我希望 (salesman, year) 被视为主键。也就是说,如果我这样做
asby1 = AccumulatedSales(salesman='Joe', year=2010, totalSales=100)
asby1.save()
asby2 = AccumulatedSales(salesman='Joe', year=2010, totalSales=200)
asby2.save()
“表” AccumulatedSales 应包含一行。所以第二次保存会覆盖第一次。
可能的解决方案
class AccumuatedSales(models.Model):
key = models.CharField(primary_key=True,, default=None, editable=False)
salesman = models.ForeignKey(Salesman)
year = models.Postiveinteger()
totalSales = models.PositiveInteger()
def save(self):
self.key = someHashFunction(self.salesman_id, self.year)
super(AccumulatedSales, self).save()
问题
- 这种方法是好的还是“正确的”?
- 字段键的最佳数据类型是什么?就我个人而言,我希望有 som 128 位字段,但据我所知,这是不可用的。