在sebpiq的帮助下,我可以使用South,natural keys和json dumpdata来修复这个问题。
基本上它只是一个data migration使用甩JSON:
datafdir = os.path.dirname(__file__)
dataf = open(os.path.join(datafdir, '0002_mh_quote_form.data.json'), 'r')
builtformfieldsjson = simplejson.loads(dataf.read())
form = BuiltForm.objects.get(pk=1)
for field in builtformfieldsjson:
try:
builtfield = BuiltFormField.objects.get_by_natural_key(form, field['fields']['fieldname'])
except:
builtfield = BuiltFormField(fieldname=field['fields']['fieldname'], builtform=form)
for part in field['fields']:
if part == 'builtform':
continue
setattr(builtfield, part, field['fields'][part])
builtfield.save()
你不能用'dumpdata','loaddata'来做吗? – sebpiq 2011-05-09 18:06:16
如果任何主键与我的客户创建的现有表单/字段一致,则不会。他们做什么。 – 2011-05-09 18:27:02
我不完全确定,但我认为如果您使用自然键,则不需要主键就可以加载数据! – sebpiq 2011-05-09 18:46:04