2013-10-21 37 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})