Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add image/avatar field to users

I want that each user on my website will have an image in his profile. I don't need any thumbnails or something like that, just a picture for each user. The simpler the better. The problem is I don't know how to insert this type of field into my user profile. Any suggestions?

like image 524
hagutm Avatar asked Jun 18 '11 13:06

hagutm


1 Answers

You need to make a form that has a clean method that validates the properties you're looking for:

#models.py from django.contrib.auth.models import User  class UserProfile(models.Model):     user   = models.OneToOneField(User)     avatar = models.ImageField()   #forms.py from django import forms from django.core.files.images import get_image_dimensions  from my_app.models import UserProfile   class UserProfileForm(forms.ModelForm):     class Meta:         model = UserProfile      def clean_avatar(self):         avatar = self.cleaned_data['avatar']          try:             w, h = get_image_dimensions(avatar)              #validate dimensions             max_width = max_height = 100             if w > max_width or h > max_height:                 raise forms.ValidationError(                     u'Please use an image that is '                      '%s x %s pixels or smaller.' % (max_width, max_height))              #validate content type             main, sub = avatar.content_type.split('/')             if not (main == 'image' and sub in ['jpeg', 'pjpeg', 'gif', 'png']):                 raise forms.ValidationError(u'Please use a JPEG, '                     'GIF or PNG image.')              #validate file size             if len(avatar) > (20 * 1024):                 raise forms.ValidationError(                     u'Avatar file size may not exceed 20k.')          except AttributeError:             """             Handles case when we are updating the user profile             and do not supply a new avatar             """             pass          return avatar 
like image 187
Brandon Avatar answered Oct 08 '22 20:10

Brandon