フォーム全体を追加して設定を解除するというソリューションが気に入っています。私は別の角度から攻撃しています。使い捨ての一時的なフォームを作成し、保存したいフィールドのみにコピーします。これが私がhttp://api.drupal.org/api/drupal/modules%21field%21field.attach.inc/function/field_attach_form/7#comment-45908に投稿したものです:
任意のエンティティバンドル(この場合はオートコンプリートノード参照テキストフィールド)から別のフォームに単一のフィールドを追加するには、フォームを一時的なフォームとフォームステートとして作成し、コピーしてそのフィールド定義を配置します。私の場合、コマースチェックアウトフォームの変更に取り組んでいます。
function example_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
$tmpform = array();
$tmpform_state = array();
$tmpnode = new stdClass();
$tmpnode->type = 'card';
// Create the temporary form/state by reference
field_attach_form('node', $tmpnode, $tmpform, $tmpform_state);
// Create a new fieldset on the Commerce checkout form
$form['cart_contents']['org_ref_wrap'] = array(
'#type' => 'fieldset',
'#title' => t('Support Organization'),
);
// Place a copy of the new form field within the new fieldset
$form['cart_contents']['org_ref_wrap'][] = $tmpform['field_card_organization'];
// Copy over the $form_state field element as well to avoid Undefined index notices
$form_state['field']['field_card_organization'] = $tmpform_state['field']['field_card_organization'];
..
どちらのソリューションの利点も、「ソース」フォームの複雑さ(複雑すぎると、フォーム挿入メソッドで多くの設定が解除されることを意味します)と、ソースフォームが時間の経過とともに新しいフィールドを受け取るかどうか(新しいフィールドが表示されるかどうか)に依存する可能性があります。 form-insertメソッドの「宛先」フォーム)。
ソリューションを共有していただきありがとうございます。