0

行を更新する前に、現在の結果を別のテーブルに保存したいと考えています。現在 pre_save を使用していますが、意図したとおりに動作していないようです。更新前のデータではなく、更新されたデータが提供されます。

class Country(models.Model):
    name = models.CharField(max_length=16)

def make_copy(sender, **kwargs):
    obj = kwargs['instance']

pre_save.connect(make_copy, sender=Country)

たとえば、国名を USA からオーストラリアに変更すると、pdb の obj.name には、更新前の名前である USA ではなく、更新後の名前であるオーストラリアが表示されます。

私は何が欠けていますか?

4

2 に答える 2

1

元のオブジェクトを取得するには、データベースにクエリを実行する必要があります。instance更新されたオブジェクトがあり、データベースに保存する準備ができています。

class Country(models.Model):
    name = models.CharField(max_length=16)

def make_copy(sender, **kwargs):
    obj = kwargs['instance']
    try:
        orig_obj = Country.objects.get(pk=obj.pk)
    except: #If it is a new object
        orig_obj = None

pre_save.connect(make_copy, sender=Country)
于 2013-06-13T01:00:55.417 に答える
0

以前のデータはデータベースにのみ存在します。ハンドラーで取得する必要があります。

于 2013-06-12T23:17:51.890 に答える