I want to overwrite the custom objects model manager to only return objects a specific user created. Admin users should still return all objects using the objects model mana
It seems necessary to use the middleware to store the user information.
However, I'd rather not modify the default ModelManager objects
, but hook it upto a different manager, that I will use in the code, say in your case user_objects
instead of objects.
Since you will use this only within views that are @login_required
you dont need all the complex error handling in the Middleware.
Just my 2¢.
Or even simpler and use foreign key to retrieve queryset.
If you have model like that
class HourRecord(models.Model):
created_by = ForeignKey(get_user_model(), related_name='hour_records')
You can query HourRecords
in a view by user with simply:
request.user.hour_records.all()
One way to handle this would be to create a new method instead of redefining get_query_set
. Something along the lines of:
class UserContactManager(models.Manager):
def for_user(self, user):
return super(UserContactManager, self).get_query_set().filter(creator=user)
class UserContact(models.Model):
[...]
objects = UserContactManager()
This allows your view to look like this:
contacts = Contact.objects.for_user(request.user)
This should help keep your view simple, and because you would be using Django's built in features, it isn't likely to break in the future.