2010-07-08 6 views
0

저는 데이터베이스에 슬러그 필드를 추가 했으므로 이제이를 거쳐 추가해야합니다. 데이터베이스의 슬러그 필드를보고 비어있는 생성하고 저장하는 스크립트를 실행하고 싶습니다. 여기에 선상에 있다고 생각하지만 작동하지 않습니다. 게시 된 코드에서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 메소드를 오버라이드 (override)하는 것 구현하는 또 다른 방법. 그것은 모든 저장에 emtpy slug가 있는지 확인합니다 (이는 성능이 없습니다).

+0

방금 ​​스크립트를 시도했지만 데이터베이스에서 아무 것도 발생하지 않았습니까? – tim

+0

백업이 있거나 데이터에 관심이 없다면 모든 행이 영향을받을 수 있도록'if' 절을 제거하십시오. – miku

+0

if 절을 제거해도 아무 것도 변경되지 않았습니다. 필드가 비어 있지 않은 데이터베이스의 null입니다. – tim

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

+0

아니, 내가 시도한 것이지만 작동하지 않습니다. – tim

+0

나는 그것을 알아 냈고, 잘못하고 있었다. – tim

관련 문제