2016-04-13 15 views
0

を変更した場合、私はモデルを持っている:ジャンゴ:追跡モデルのフィールドが

私は、その後、別のモデル内の別のオブジェクトを作成date_updatedがフィールドに挿入されたものがある場合は上書きせずに、追跡したい
class Object(Object1): 
    name = models.CharField(max_length=255, blank=True) 
    description = models.TextField(blank=True) 
    date_updated = models.DateTimeField(blank=True, null=True) 

saveメソッド。私はthisを試してみましたが、

if date_updated: 
    MyModel.objects.create(type="D", user=request.user) 

、まだありません成功:

例えば

+0

を - なぜあなたはこの要件を持っていますか? – alecxe

+0

試したコードを追加することもできますか? – AKS

+1

あなたは 'post_save'シグナルの使用を検討しましたか? – karthikr

答えて

0

申し訳ありません、あなたがrequest.userを参照していることに気がつきました。これはあなたのためにはうまくいかないでしょう。特定のrequestオブジェクトが必要なので、requestオブジェクトが参照しているビューで最もよく行われます。

pre_saveを使用すると、現在のインスタンスのプロパティ値を現在データベースにあるプロパティ値と比較できます。

@receiver(pre_save, sender=MyModel) 
def check_date(sender, instance=None, created=False, **kwargs): 
    changed = created or instance.date_updated != MyModel.objects.get(pk=instance.pk).date_updated 

    if changed: 
     MyModel.objects.create(type="D", user=request.user) 

ただし、テストしませんでした。

+0

私の場合、これを行う方法の例を教えてください。私はこれまで多くのことを試していたからです。 –

+0

ここからkwargsのユーザーを取得できますか? –

0

trackerフィールドはdjango-model-utilsから使用できます。

モデルにトラッカーを追加します。

class Object(Model): 
    name = models.CharField(max_length=255, blank=True) 
    description = models.TextField(blank=True) 
    date_updated = models.DateTimeField(blank=True, null=True) 

    tracker = FieldTracker() 

あなたはsave()にしたり、通常モデルの更新他の場所で確認することができます:「saveメソッドをオーバーライドすることなく、」

if object.tracker.has_changed('date_updated'): 

    create_new_object(data) 
関連する問題