0

オブジェクトが追加または更新されたときに外部データベースで操作を実行するために、Django の Model.save() メソッドを上書きしました。

基本的に、ここに私の方法があります:

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        # Update query on the external database.

    super(MyModel, self).save(*args, **kwargs)

私の質問は、たとえば self.name を実行するだけで送信されたデータにアクセスできることはわかっていますが、どうすれば古いデータにアクセスできますか? もちろん、更新の場合は、既存のデータを意味します。

これが私の問題であるため、外部データベースは多くのクエリをサポートしていないため、問題のフィールドが更新された場合にのみクエリを実行したいと考えています。

これが私がやりたいことです:

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        if self.name is not self.THE_CURRENT_NAME
            # Update query on the external database.

    super(MyModel, self).save(*args, **kwargs)

誰にもアイデアがありますか?

4

3 に答える 3

1

仕事に使用している場合は、そのメソッドをModelFormオーバーライドsaveし、モデルにカスケードするかどうかを決定しますsave(で呼び出す)。supercommit=True

この時点で、おそらくすべての情報が揃っているはずです。次に、それを使用する方法が必要です。

django のフォームには、必要なもののためのツールがあります。changed_dataフォームの属性とhas_changed()メソッドを確認してください。

class MyModelForm(forms.ModelForm):

    class Meta:
        model = MyModel

    def save(commit=True):
        if self.has_changed():
            super(MyModelForm, self).save(commit=commit)
于 2013-04-03T07:28:15.253 に答える
0

データベースからデータを取得したいが、多くのクエリを作成したくない場合。データが多すぎない場合は、データベースからすべてのデータをメモリに読み取ってから、保存しようとしている値をメモリ内のデータと比較します。それらが同じでない場合は、その値をに割り当てるだけです。メモリデータとデータベースの更新。

于 2013-04-03T07:29:53.403 に答える
0

保存する前に、DB から取得する必要があります。

def save(self, *args, **kwargs):    
    if self.pk is None:
        # Insert query on the external database.
    else:
        old = Lab.objects.get(pk=self.pk)
        if self.name is not old.name:
            ...             

    super(Lab, self).save(*args, **kwargs)
于 2013-04-03T07:15:34.790 に答える