2013-10-21 73 views
1

我嘗試運行此代碼:與管理功能複製元素

# -*- coding: utf-8 -*- 

from django.core.management.base import BaseCommand 

class Command(BaseCommand): 
    def handle(self, *args, **options): 

     from blogs.models import Blog, Post 
     from sitename.settings import DEFAULT_CHARSET 

     for blog in Blog.objects.all().using('old'): 
      try: 
       Blog.objects.get(old_id=blog.id) 
       continue 
      except: 
       pass 
      new_blog = Blog(
       name =  blog.name, 
       description=blog.description, 
       old_id = blog.id 
      ) 
      new_blog.save() 

但我有例外:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128) 

我GOOGLE了這個問題,並發現此解決方案:

name = blog.name.encode('ascii','ignore') 

結果令人不安:所有俄羅斯符號已被刪除。

"Пост номер 15-14" => "15-14" 

我該如何正確地複製數據?

回答

1

我想,你有一個或兩個數據庫的字符集問題,你應該檢查你從舊數據庫得到的編碼和新的數據庫。

你的循環看起來很奇怪,Django的有QuerySet一個不錯的功能get_or_create方法,所以有很好的版本:

for blog in Blog.objects.all().using('old'): 
    Blog.objects.get_or_create(old_id=blog.id, defaults={'name': blog.name, 
                 'description': blog.description})