2011-12-18 18 views
0

は、私がlast_visitedフィールドを更新し、私は多くのテキストフィールドを持つNewsモデル頻繁に更新Djangoのモデルの提出1

class News(models.Model): 

    title = models.CharField(max_length=255) 
    subtitle = models.CharField(max_length=255, blank=True) 
    lead = models.TextField(max_length=4096) 
    content = models.TextField() 
    ... 
    last_visited = models.DateTimeField() 

たびに私のNewsオブジェクトの出力を持っている、と想像しますすべてのモデルフィールドをオーバーライドします。

UPDATE news SET title='...', subtitle='...', last_visited = '...' WHERE id = '...'; 

代わりのちょうど1:

UPDATE news SET last_visited = '...' WHERE id = '...'; 

私はそれがあると、それはについて考える価値があるどのように悪い心配。

Djangoのドキュメントは、クエリセットの更新を提供していますが、それは非常にエレガントではないになります。

def upd(obj, **kwargs): 
    obj.__class__._default_manager.filter(pk=obj.pk).update(**kwargs) 

upd(news, last_visited=datetime.datetime.now()) 

私はMySQLバックエンドを使用します。

答えて

1

しかしクリーナーアプローチで:

class News(models.Model): 

    def update_visited(self): 
     News.objects.filter(pk=self.pk).update(
         last_visited=datetime.datetime.now()) 
+0

私はこれより多くのが好き – San4ez

0

クエリーセットを使用していると思います。updateが良いです。これは、偶然に他のフィールドへの変更を上書きする可能性を排除します。

あなたはそれが優しくないように見えることは知っていますが、upd機能で一度しか使用しないと、あなたの意見にupdを使用してください。それはおそらくlast_visitedフィールドを実装し、あなたのNewsクラスがこのクラスから継承し、いくつかの基本クラスを持つことが理にかなって

0

複数のモデルにこれを使用すると仮定すると(あなたがupd関数にobjを渡すので、この推測) ...基本クラスだけで更新することができます。last_visitedの情報を別のモデルに入れて、ForeignKeyまたはGenericForeignKeyのいずれかのNewsモデルを参照することもできます異なるモデルの「履歴」)。アップデートを使用して

関連する問題