Django: ModelForms: ImageField हमेशा मॉडलफॉर्म द्वारा खाली और अस्वीकार कर दिया जाता है

मैंने कई ModelForm तत्वों के आधार पर एक फॉर्म बनाया है। सभी फ़ील्ड ठीक से काम करते हैं ImageField । गायब ImageField form.is_valid() हमेशा गलत लौटाता है - भले ही मैं request.FILES को फॉर्मेट करता हूं।

ImageField के साथ फ़ॉर्म हमेशा अमान्य/खाली क्यों होता है?

फार्म

class UserProfileForm2(forms.ModelForm):

    class Meta:
        model = models.UserProfile
        fields = ['description', 'picture']

class LocationForm(forms.ModelForm):
    class Meta:
        model = models.Location
        fields = ['city', 'state', 'country']

class UserForm(forms.ModelForm):
    class Meta:
        model = registration_models.User
        fields = ['first_name', 'last_name']

मॉडल

class Location(models.Model):

    city = models.CharField(max_length=100)
    state = models.CharField(max_length=100)
    country = models.CharField(max_length=100)

    def __unicode__(self):
        return ' - '.join([self.city, self.state, self.country])


class UserProfile(models.Model):

    authenticationuser = fields.AutoOneToOneField(AuthUser)
    description = models.TextField()
    picture = models.ImageField(upload_to='uploaded_files/', null=True)
    location = models.ForeignKey(Location, null=True)
    appear_in_public_ranking = models.BooleanField(default=True)

    def __unicode__(self):
        return self.authenticationuser.username

देखें

@login_required
def changeprofile(request):
    form = None

    # user posted his new profile settings
    if request.method == 'POST':
        user_form = myforms.UserForm(request.POST)
        user_profile_form = myforms.UserProfileForm2(request.POST, request.FILES)
        location_form = myforms.LocationForm(request.POST)

        forms_are_invalid = not (user_form.is_valid() and user_profile_form.is_valid() and not location_form.is_valid())

        if forms_are_invalid:
            forms = {'user_form':user_form,
                 'user_profile_form':user_profile_form,
                 'location_form':location_form}
            return shortcuts.render(request, 'changeprofile.html', forms)

        location_form.save()
        user_form.save()
        user_profile_form.save()

        return HttpResponseRedirect('/profile')

    else:
        forms = {'user_form':user_form,
            'user_profile_form':user_profile_form,
             'location_form':location_form}
        return shortcuts.render(request, 'changeprofile.html', forms)

खाका

        <form action="{% url 'changeprofile' %}" method="post">
        {% csrf_token %}
            {{ user_form }}
            {{ location_form }}
            {{ user_profile_form }}
            <input type="submit" value="Submit" />
        </form>
1

1 उत्तर

यदि आपके फॉर्म में फ़ाइल इनपुट है तो आपको अपने फॉर्म में enctype सेट करना होगा:

<form action="{% url 'changeprofile' %}" method="post" enctype="multipart/form-data">

अन्यथा request.FILES हमेशा खाली रहेगा।

6
जोड़ा