Delete Record and display errors

I made an example with nodes and leafs

  schema "nodes" do
    field(:name, :string)
    has_many(:leafs, Leaf)
    timestamps()
  end

...
  schema "leafs" do
    field(:name, :string)
    belongs_to(:node, Node)
    timestamps()
  end

I load a node, with leafs…

iex> import Ecto.Changeset
iex> n = EctoLab.Fk.get_node(1) |> EctoLab.Repo.preload(:leafs)
%EctoLab.Fk.Node{
  __meta__: #Ecto.Schema.Metadata<:loaded, "nodes">,
  id: 1,
  inserted_at: ~N[2018-09-06 12:41:43.978124],
  leafs: [
    %EctoLab.Fk.Leaf{
      __meta__: #Ecto.Schema.Metadata<:loaded, "leafs">,
      id: 2,
      inserted_at: ~N[2018-09-06 12:53:11.336298],
      name: "lolo", 
      node: #Ecto.Association.NotLoaded<association :node is not loaded>,
      node_id: 1,
      updated_at: ~N[2018-09-06 12:53:11.336308]
    }
  ],
  name: "koko",
  updated_at: ~N[2018-09-06 12:41:43.979841]
}

And here, if I try to delete the node

iex> changeset = Ecto.Changeset.change(n)
iex> changeset = foreign_key_constraint(changeset, :leafs, name: :leafs_node_id_fkey, message: "still exist") 
#Ecto.Changeset<action: nil, changes: %{}, errors: [], data: #EctoLab.Fk.Node<>,
 valid?: true>
iex(30)> EctoLab.Repo.delete(changeset)

14:59:08.942 [debug] QUERY OK db=0.1ms
begin []
 
14:59:08.949 [debug] QUERY ERROR db=6.4ms
DELETE FROM "nodes" WHERE "id" = $1 [1]
 
14:59:08.949 [debug] QUERY OK db=0.2ms
rollback []
{:error,
 #Ecto.Changeset<
   action: :delete,
   changes: %{},
   errors: [leafs: {"still exist", []}],
   data: #EctoLab.Fk.Node<>,
   valid?: false
 >}

I cannot delete it, because it has leafs, and I got the message in the changeset.