Content on this page is probably outdated and represents my personal knowledge, feelings and understading of things at that time.
So, I always wanted to set the “author” fields of my Models to currently logged in user. But I also wanted to give the user a choice to change that, so most of the snippets out there were usless for me. So, with a bit of “inspirational” reading and thinking, I got an idea, why not to overload formfield_for_dbfield ( or extend that overload in my case ). Some trips to #django and failed trys and misunderstood docs later I came to the solution, it’s not exactly the nicest, but works well (for now). I’m basicly overloading get_form and storing the current user ( which I get from request, thats handed as a param to get_form ) and then use this information in formfield_for_dbfield.
def get_form(self, req, obj=None, **kwargs):
# save the currently logged in user for later
self.current_user = req.user
return super(PageAdmin, self).get_form(req, obj, **kwargs)
def formfield_for_dbfield(self, db_field, **kwargs):
"""
Hook for specifying the form Field instance for a given database Field
instance.
"""
if db_field.name == ‘author’:
kwargs[‘initial’] = int(self.current_user.id)
return db_field.formfield(**kwargs)
else:
return super(PageAdmin, self).formfield_for_dbfield(db_field, **kwargs)