4

私はいくつかの固定数num = 1000を持っています。これで、object.id と num の合計である必要があるフィールドができました。以下のような save() でこれが必要です。

def save(self, *args, **kwargs):
    num = 1000
    self.special = self.id + num
    super(MyModel, self).save(*args, **kwargs)

ただし、self.id は保存後に認識され、special という名前のフィールドが必要です。self.id を取得するには?

4

1 に答える 1

6

初めに?追加しようとしている番号は固定番号ですか? もしそうなら、なぜそれをデータベースに保存する必要があるのですか? プロパティとして機能し、必要に応じて数値を追加するメソッドをモデルに作成できます。

class ModelX(models.Model):
    ...
    def special(self):
        num = 1000
        return self.id + num

ダニエルが言ったように、オブジェクトがデータベースに保存された後にIDを取得するため、これをデータベースに保存する必要がある場合は、おそらく2つのデータベースアクセスを行う必要があります。

saveメソッドを次のように変更できます。

def save(self, *args, **kwargs):
    num = 1000
    self = super(MyModel, self).save(*args, **kwargs)
    self.special = self.id + num
    self.save()

これは、モデルを宣言した方法に応じて、データベースでオブジェクトが最初に作成されるときにこれを行うだけで最適化される場合があることに注意してself.specialください。NULL

def save(self, *args, **kwargs):
    num = 1000
    self = super(MyModel, self).save(*args, **kwargs)
    # self.special is null, (creating the object in the db for the 1st time)
    if not self.special: # or if self.special != defaultvalue (defined in MyModel)
        self.special = self.id + num
        self.save()

これが役立つことを願っています。

于 2013-05-25T21:18:14.350 に答える