2012-01-04 3 views
3

최근에 내 MySQL 데이터베이스 모델에 슬러그 필드를 추가했습니다 (왜 이런 일이 발생하지 않았는지 알 수 없습니다). 이제 데이터베이스에 빈 슬러그 필드가 있습니다. 나는 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

아마도 도움이 될 것 같습니다 : http://stackoverflow.com/questions/7499767/temporarily-disable-auto-now-now-now-add – aganders3

+0

여기에 얼마나 많은 데이터 (얼마나 많은 객체)가 있습니까? –

+0

나는 확실히 그것을 수동으로하고 싶지 않을 것입니다. 그러나 1 톤이 아닙니다. 10 모델. 모델 당 3 개의 12 개 개체가 aganders3의 제안을 구현하기 위해 노력하고 있습니다. –

답변

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() 로직으로 바꿉니다.

관련 문제