Alasdair’s approach is nice but outdated. Radev’s approach looks quite nice and as mentioned in the comment, it strikes me that there is nothing about this in the documentation.
Apart from those, since Django 1.7 there is a function get_changeform_initial_data
in ModelAdmin
that sets initial form values:
def get_changeform_initial_data(self, request):
return {'name': 'custom_initial_value'}