2010-07-08 56 views
0

我添加了一個slug字段到我的數據庫,現在需要通過並添加這些。我想運行一個腳本來查看數據庫中的slug字段,如果爲空則生成並保存。這是我認爲是沿線,但沒有工作。Django腳本添加字段到數據庫

from project.apps.tracks.models import * 

def process_slug(): 
    if not track.slug: 
     slug = slugify("%s - %s" % (track.name, track.artist)) 
    else: 
     slug = "" 

    super(process_slug, track).save() 

回答

1

從您發佈的代碼,這一點並不明顯,你實際上是通過你的所有Track對象循環。對於這種偶爾重複命令

from project.apps.tracks.models import Track 
# import for slugify 

def process_slug(): 
    """ Populate slug field, if they are empty. 
    """ 
    for track in Track.objects.all(): 
     if not track.slug: 
      slug = slugify("%s - %s" % (track.name, track.artist)) 
      track.slug = slug 
      track.save() 

一個優選的地方是management/commands你的應用程序中下。


另一種方式來實現將覆蓋你的Track模型save方法。它會檢查每次保存時的emtpy slugs(這不是高性能的)。

+0

剛試過腳本,數據庫中什麼都沒有發生? – tim 2010-07-08 13:35:34

+0

如果您有備份或不關心數據,請嘗試刪除'if'子句,以便所有行都會受到影響。 – miku 2010-07-08 13:40:25

+0

刪除if子句並沒有改變。數據庫中的該字段爲空不爲空。 – tim 2010-07-08 13:42:16

0

可以這樣設置默認:

slug = models.SlugField(default=process_slug) 
0

添加打印語句的腳本,但沒有得到記錄。

from django.conf import settings 
from django.template.defaultfilters import slugify 

from project.apps.tracks.models import Track 

def process_slug(): 
    """ Populate slug field, if they are empty. 
    """ 
    for track in Track.objects.all(): 
     print "Trying to slugify" 
     if not track.slug: 
      print "slug = %s" 
      slug = slugify("%s %s" % (track.track, track.artist)) 
      track.slug = slug 
      track.save() 
+0

這是一個答案? – miku 2010-07-08 14:19:49

+0

不,這是我試過的,但它不工作。 – tim 2010-07-08 14:43:17

+0

我想通了,是錯誤的 – tim 2010-07-08 15:02:39