diff --git a/lib/ash_admin/components/resource/form.ex b/lib/ash_admin/components/resource/form.ex
index fbc5f9e..161afc3 100644
--- a/lib/ash_admin/components/resource/form.ex
+++ b/lib/ash_admin/components/resource/form.ex
@@ -227,6 +227,25 @@ defmodule AshAdmin.Components.Resource.Form do
argument,
opts
) do
+ key =
+ opts[:value_is_key] ||
+ relationship.destination
+ |> Ash.Resource.Info.primary_key()
+ |> case do
+ [key] ->
+ key
+
+ _ ->
+ nil
+ end
+
+ {hidden?, exactly_fields} =
+ if map_type?(argument.type) || !key do
+ {true, nil}
+ else
+ {false, [key]}
+ end
+
~F"""
- "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden>
+ {#if hidden?}
+ "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden>
+ {/if}
{#if inner_form.source.form_keys[:_join]}
- "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden>
+ {#if hidden?}
+ "[#{elem(kv, 0)}]"} value={elem(kv, 1)} hidden>
+ {/if}
{render_attributes(
assigns,
relationship.through,
join_action(relationship.through, join_form, inner_form.source.form_keys[:_join]),
join_form,
- inner_form.source.form_keys[:_join][:create_fields],
- skip_through_related(relationship)
+ exactly_fields || inner_form.source.form_keys[:_join][:create_fields],
+ skip_through_related(exactly_fields, relationship)
)}
{/if}
@@ -269,8 +292,8 @@ defmodule AshAdmin.Components.Resource.Form do
inner_form.source.resource,
inner_form.source.source.action,
inner_form,
- relationship_fields(inner_form),
- skip_related(relationship)
+ exactly_fields || relationship_fields(inner_form),
+ skip_related(exactly_fields, relationship)
)}