2012-01-04 8 views
3

私は最近、私のMySQLデータベースモデルにslugフィールドを追加しました(これは私がこれを以前にやった理由は分かりません)。今私のデータベースに空のスラグフィールドがたくさんあります。私は今、私は私のモデルの各レコードを移入するために何かを書きたいsave definition in each modeldjangoデータベーススラッグデータへの一括変更

class test(models.Model): 
    q = models.CharField(max_length=30) 
    s = models.SlugField() 

    def save(self, *args, **kwargs): 
     self.s = slugify(self.q) 
     super(test, self).save(*args, **kwargs) 

が含まれています。 どのようなコードを書くことができれば、私のモデル/レコードをすべて循環させて、スラグに入れることができますか?

追加の合併症(私はこのことについて私は大したことは分かりませんが)。私は各モデルにフィールドを持っています:

last_modified = models.DateTimeField("Last Modified", auto_now=True) 

レコードが本当に変更されていないので、私はむしろこれを引き起こしません。 last_modifiedフィールドを更新せずにスラッグを作成することはできますか?それは多くのデータがないが、それはちょうど1オフの事です

+1

おそらく役に立ちます:http://stackoverflow.com/questions/7499767/temporarily-disable-auto-now-now-now-add – aganders3

+0

ここでどのくらいのデータ(何オブジェクト)を話していますか? –

+0

私は確かに手動でそれをしたくない十分なオブジェクト。しかし、トンではありません。 10モデル。おそらくモデル当たり3ダースのオブジェクト –

答えて

2

まあ場合は、単にシェルでそれを行う:

$ python manage.py shell 
>>> from my_app.models import Test 
>>> for obj in Test.objects.all(): 
>>>  obj.save() 

あなたはこのロットをやろうとしている場合は、書き込みこれを行うcustom management commandです。

auto_now号については、これがauto_nowauto_now_addの使用を停止した理由です。私がそれらを使用するたびに、私はいつもそれらを後で切り裂きました。実際、Django開発者は、廃止予定だと思っていますが、将来は削除される可能性があります。私はちょうどソースコードを編集し、あなたのコマンドを実行する前にそのオプションを削除し、それを再び追加するか、カスタムsave()ロジックで置き換えます。

関連する問題