Display links stored in "External links". Proposal for the structure: link name, URL. This way we can add more links, for example to the service documentation.
Followed this setup, except…
The permissions should be using django-rules – we use the idiomatic User.has_perm() which delegates to auth frameworks like django-rules. We currently set the model permission rules in the…
Using mark_safe means that we trust k8s error messages to never contain valid markup/other injections, e.g. by way of user-defined names. I don't know enough about how k8s errors look and are processed, just wanted to point that out.
Looks good to me! One comment on using mark_safe on input that we do not control directly, which I don't have enough k8s knowledge to judge (should be safe?), ready to merge from my POV.
haha sorry, I use apostrophes by default when writing text (as opposed to code), but I suppose that does look odd in some IDEs …
You could instead remove the is_staff permission from https://servala.app.codey.ch/servala/servala-portal/src/branch/main/src/servala/core/models/organization.py#L121
The full message doesn’t need to be an i18n string – better off as just as f"{message} {support_message}"
I don't think comments like this add much to the code, FWIW (of course up to you if you want to keep it).
Pretty repetitive to have this method on both the form and the view – I think it’d be cleaner to centralise this:
LGTM – can be merged as-is, just some suggestions for possibly better code structure.