Wickkiey
Wickkiey

Reputation: 4632

Django : Image upload "This field is required"

I tried to upload image using django. But i got error.

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    phone = models.CharField(max_length=10)
    college = models.CharField(max_length=40)
    pic = models.ImageField(upload_to='images/pics')

views.py

def register(request):
    registered = False
    context = RequestContext(request)
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST,request.FILES)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.save()

            up = UserProfile(user=user,pic=request.FILES['pic'],phone=request.POST['phone'],college=request.POST['college'])

            up.save()

            registered =True
        else:
            print(user_form.errors, profile_form.errors)
            print("error")
    else:
        user_form = UserForm()
        profile_form=ProfileForm()

    return render_to_response('join/register.html',
        {'user_form':user_form,'profile_form':profile_form,'registered':registered},
        context)

urls.py

  urlpatterns = [
        url(r'^join/$',join_views.register, name='register'),
        url(r'^$',join_views.jlogin, name='login'),

        ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

html

<form id="user_reg" method="post" action="." enctype="multipart/form-data">
<fieldset>
    <legend>Join with US</legend>
    {% csrf_token %}
    <div>
        <table>
           <tr> <th><label for="user">User Name</label></th> <td>{{ user_form.username }}</td></tr>
            <tr> <th><label for="email">Email</label></th> <td>{{ user_form.email }}</td></tr>
            <tr> <th><label for="password">Password</label></th> <td>{{ user_form.password }}</td></tr>
            <tr> <th><label for="phone">Phone</label></th> <td>{{ profile_form.phone }}</td></tr>
            <tr> <th><label for="college">College</label></th> <td>{{ profile_form.college }}</td></tr>
            <tr> <th><label for="pic">Picture</label></th> <td>{{ profile_form.pic }}</td></tr>

        </table>

    </div>
    <br>

 <input type="submit" value="Register">
 </fieldset>
</form>
{%  endif %}

form.py

class UserForm(forms.ModelForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'txtbox'}))
    password = forms.PasswordInput()
    pic = forms.ImageField(help_text=False);

    class Meta:
        model = User
        fields = ('username','email','password')

class ProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields= ('phone','college','pic')

This is my example of uploading image. my settings MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'

while submitting. i got error like "{'pic': [u'This field is required.']}, {})" can anyone explain how can i upload images ?? thanks in advance for your help !

Upvotes: 4

Views: 4086

Answers (1)

Raja Simon
Raja Simon

Reputation: 10305

Two ways :

  1. Why you are defining pic in UserForm ? Just remove it

  2. or just include request.FILES in user_form ( wrong way )

Upvotes: 2

Related Questions