Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Django UpdateView does not validate form fields, and does not update

I have created the following Django UpdateView:

class ProfileSettingsView(SuccessMessageMixin, UpdateView):
    template_name = "accounts/settings/profile_settings.html"
    form_class = ProfileSettingsForm
    success_message = "Your profile has been successfully updated."
    success_url = reverse_lazy("accounts:profile_settings")
    context_object_name = "staff_member"

    def get_object(self, queryset=None):
        staff_member = get_object_or_404(StaffMember, user=self.request.user)
        return staff_member

The ProfileSettingsForm is defined as follows:

class ProfileSettingsForm(forms.ModelForm):
    class Meta:
        model = StaffMember
        fields = ["profile_image"]

And finally, the StaffMember model looks like this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

class StaffMember(models.Model):
    user = models.OneToOneField(
        "auth.User", on_delete=models.PROTECT, related_name="staff_member"
    )
    profile_image = models.ImageField(
        upload_to=get_profile_image_upload_path,
        blank=True,
        default="none.png",
        help_text="A profile image for this staff member. Must be square, and be in .png format.",
        validators=[FileExtensionValidator(["png"]), validate_img_square],
    )

My UpdateView renders correctly.
I select an image from my local machine and press submit.
The form posts successfully, and I see the success message. However, the validators, as defined on the StaffMember profile_image field have not been run.
Also, the profile_image field is not updated.

Why is validation not being called on my form fields, and why are they not being updated? What am I missing?

>Solution :

Have you checked that your form tag in the template contains the enctype="multipart/form-data" attribute? This is required to send the file uploads along. This is probably missing and then the file is "missing" from the form. Since the model and form field are not required, you don’t get any validation on it, nor validation errors.

Relevant documentation: https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/#basic-file-uploads

Note that request.FILES will only contain data if the request method was POST, at least one file field was actually posted, and the that posted the request has the attribute enctype="multipart/form-data". Otherwise, request.FILES will be empty.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading