Django: 'User' object has no attribute 'user'

django, python

Solution

You need to remove @login_required() decorator from the get_alertnum() function. The decorator assumes the first argument is a request object and is trying to access the user attribute.

Also you could simplify and speed up the function by:

def get_alertnum(user):
    return Alert.objects.filter(read=False, for_user=user).count()

Below is an explanation of the count method.

https://docs.djangoproject.com/en/dev/ref/models/querysets/#count

Problem

My website has a system of alerts. When a certain action occurs the system loggs an alert in the following model: ``` class Alert(models.Model): title = models.CharField(max_length=60) read = models.BooleanField #if this is a new alert of not for_user = models.ForeignKey(User) #which user will see it link = models.CharField(max_length=100) ``` Many functions need to check the number of alerts a user has (Mostly to display the number of new alerts next to the alerts tab of the site). Because of that, I created this function: ``` @login_required() def get_alertnum(user): alert_objects = Alert.objects.filter(read = False, for_user=user) num = 0 for n in alert_objects: num += 1 return num ``` Which is accessed by this function: ``` @login_required() def posting_draft(request): user = request.user user_drafts = Draft.objects.filter(user = user) drafts = dict() for d in user_drafts: drafts[d.title] = d.id alertnum = get_alertnum(user) return render_to_response('posting_draft.html', {'STATIC_URL':STATIC_URL, 'draft_l' : drafts, 'selected':"dr", alertnum: alertnum}) ``` But I get the following error: ``` Environment: Request Method: GET Request URL: http://127.0.0.1:8000/posting/drafts Django Version: 1.4 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'Knights', 'django.contrib.admin') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/contrib/auth/decorators.py" in _wrapped_view 20. return view_func(request, *args, **kwargs) File "/Users/Mike/Desktop/Main/Django-Development/BBN/Knights/views.py" in posting_draft 245. alertnum = get_alertnum(user) File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/contrib/auth/decorators.py" in _wrapped_view 19. if test_func(request.user): File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/utils/functional.py" in inner 185. return func(self._wrapped, *args) Exception Type: AttributeError at /posting/drafts Exception Value: 'User' object has no attribute 'user' ```

Original source