Override default get_absolute_url on User objects?
I'm trying to make a generic table for listing django_tables
objects. I've got everything working, except 开发者_开发问答that the get_absolute_urls()
on my User
objects returns:
/users/<username>/
While I could create this URL, it doesn't match with the rest of the site layout, so I'm looking for another way to do this. Is there a way to override this value without breaking the built in authentication and other functionality?
You can do this in your settings.py file using the setting ABSOLUTE_URL_OVERRIDES
ABSOLUTE_URL_OVERRIDES = {
'auth.user': lambda u: "/users/%s/" % u.username,
}
Here's a link to the official docs: https://docs.djangoproject.com/en/stable/ref/settings/
As a side note:
Since django v1.7 the django.contrib.auth.models.AbstractUser
no longer defines a get_absolute_url()
method (see release notes).
So the OP's problem will not exist with django > v1.7 as you anyways need to define your custom get_absolute_url()
method.
Now there are two way to do this:
- Define a
get_absolute_url()
method in your User model extension. - Use the solution from Mark Lavin's answer to create (not overwrite) the
User.get_absolute_url()
through theABSOLUTE_URL_OVERRIDES
setting.
精彩评论