user12001212
user12001212

Reputation:

Django - The 'image' attribute has no file associated with it

User can register without a profile image. Now I get error that no file was associated with the login.

Why does it validate the form and then try to save the image?

It should not check for the image.


Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
  76.             return view(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/views.py" in dispatch
  90.         return super(LoginView, self).dispatch(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/generic/edit.py" in post
  183.             return self.form_valid(form)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/views.py" in form_valid
  119.         auth_login(self.request, form.get_user())

File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py" in login
  161.     user_logged_in.send(sender=user.__class__, request=request, user=user)

File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py" in send
  193.             for receiver in self._live_receivers(sender)

File "/home/django/django_project/accounts/views.py" in got_online
  115.     user.profile.save()

File "/home/django/django_project/accounts/models.py" in save
  116.             img = Image.open(self.image.path)

File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py" in path
  64.         self._require_file()

File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py" in _require_file
  46.             raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)

Exception Type: ValueError at /login/
Exception Value: The 'image' attribute has no file associated with it.

accounts/models.py

class UserProfile(models.Model):
        image = models.ImageField(upload_to=upload_image_path,null=True,blank=True)

    def save(self, *args, **kwargs):
    super(UserProfile,self).save(*args, **kwargs)
    if self.image != None:
        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)


def post_save_user_receiver(sender, instance, created, *args, **kwargs):
    if created:
        new_profile = UserProfile.objects.get_or_create(user=instance)

The registration works without the user having a image, but the login does not.

Thank you for any help

Upvotes: 1

Views: 968

Answers (2)

Eugene Prikazchikov
Eugene Prikazchikov

Reputation: 1904

According to traceback, there is a signal receiver in accounts/views.py#115, that listens for user_logged_in signal and tries to save user profile:

File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/__init__.py" in login
  161.     user_logged_in.send(sender=user.__class__, request=request, user=user)
...
File "/home/django/django_project/accounts/views.py" in got_online
  115.     user.profile.save()

And in user profile save and tries to open the profile image to thumbnail it.

Upvotes: 0

user12001212
user12001212

Reputation:

I solved it by adding a default image to the file field:

image               = models.ImageField(upload_to=upload_image_path,default='default.jpeg')

and by changing the if statement in the save method

from:

  if self.image != None:

to:

  if not self.image:

Upvotes: 1

Related Questions