4

私はGoogleAppEngineでdjangononrel/djangoappengineを使用しています。複合主キーを直接指定することはできません。ただし、この動作をエミュレートすることは可能です。最善のアプローチは何か疑問に思っています。

問題

次のデータモデルを検討してください

class AccumuatedSales(models.Model):
    salesman = models.ForeignKey(Salesman)
    year = models.Postiveinteger()
    totalSales = models.PositiveInteger()

(セールスマン、年)を主キーとして扱いたい。つまり、私がそうするなら

asby1 = AccumulatedSales(salesman='Joe', year=2010, totalSales=100)
asby1.save()
asby2 = AccumulatedSales(salesman='Joe', year=2010, totalSales=200)
asby2.save()

'テーブル'AccumulatedSalesには1つの行が含まれている必要があります。したがって、2回目の保存で最初の保存が上書きされます。

考えられる解決策

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()

質問

  • このアプローチは良いですか、それとも「正しいアプローチ」ですか?
  • フィールドキーに最適なデータ型は何ですか?個人的には128ビットフィールドが欲しいのですが、私の知る限りでは利用できません。
4

1 に答える 1

0

これはかなり良い解決策のように見えます。

于 2012-07-07T18:01:49.380 に答える