I dont think the enum has to be static. I think you can pass any valid enumerable.
So something like that should work:
def changeset(changeset) do
changeset
|> cast(...)
|> validate_required(...)
|> validate_parts()
end
defp validate_parts(changeset) do
pack = fetch_field!(changeset, :pack)
changeset
|> validate_inclusion(:body, Packs.parts_for(pack, :body))
|> validate_inclusion(:pants, Packs.parts_for(pack, :pants))
end