4

私はオンライン フォーム ビルダー ツール (特に保険代理店向け) に取り組んでいます。私たちがお客様に提供したいことの 1 つは、一般的な製品 (自動車、家庭、生活など) の事前作成済みフォームをデフォルトで利用できるようにすることですが、それでも変更可能です。

通常の状況では、開発環境でフォームを作成し、これらのフォームを含むフィクスチャを作成し、すべてのライブ サイトで syncdb を実行します。一部のお客様は既にフォームを作成しており、フィクスチャの主キーと競合する可能性があるため、残念ながらその可能性はありません。エクスポートしようとしている相互に関連する 4 つの異なるテーブルもありますが、それはすべてsqformbuilderアプリ内にあります。

フィクスチャをエクスポートする方法はありますが、データベースの別の実行中のコピーに柔軟に挿入できますか?

4

3 に答える 3

2

sebpiq の助けを借りて、Southnatural keys、およびjson dumpdataを使用してこれを修正することができました。

基本的には、ダンプされた 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()  
于 2011-05-11T18:43:50.247 に答える
-2

pk キーにnullフィクスチャの値がある場合、loaddata はデータベース テーブルに新しい行を作成します (主キー シーケンスから新しい主キー値を割り当てます)。このように簡単にできます。

唯一の複雑な点は、モデルに外部キーがある場合です。この場合、参照される外部キー テーブルは、https://docs.djangoproject.com/en/dev/topics/serialization/#deserialization-of-natural-keysに従って、自然キーを使用して逆シリアル化するように構成する必要があります。フィクスチャでは、外部の主キー値を使用する代わりに、外部の自然キーを使用します。たとえば、{"widget": 42}代わりに{"widget": ["XJ234245"]}. 自然キーを使用したシリアライゼーションのセクションも参照してください。これは、自然キーを使用してフィクスチャをダンプするのに役立ちます。

于 2012-10-16T19:45:56.787 に答える