The typical problem is forgetting to add the enctype='multipart/form-data'
attribute to the form tag On Sat, Jul 2, 2016 at 9:40 PM, Lee Hinde <[email protected]> wrote: > Using django-storages to put user uploaded files on s3. > > Uploading images in the shell works fine. So, I assume I've got > django-storages and boto installed fine and S3 configured correctly. > > Uploading in real-life, doesn't work. The error I get back is that the > image field is required. > > The model: > > class PropertyPhotos(models.Model): > property = models.ForeignKey(Property) > image = models.ImageField(upload_to="img") > title = models.CharField(max_length=200, blank=True) > > The form: > > class PhotoForm(forms.ModelForm): > property_key = forms.CharField(required=False, > widget=forms.HiddenInput()) > > def __init__(self, property_key, *args, **kwargs): > super(PhotoForm, self).__init__(*args, **kwargs) > self.initial['property_key'] = property_key > > class Meta: > model = PropertyPhotos > fields = [ 'image', 'title'] > exclude = ['property', ] > > > The view: > > class AddPhotos(LoginRequiredMixin, CreateView): > form_class = PhotoForm > success_url = reverse_lazy('add_photos') > template_name = 'photo_entry.html' > model = PropertyPhotos > > def get_form_kwargs(self): > kwargs = super(AddPhotos, self).get_form_kwargs() > kwargs['property_key'] = self.kwargs.get('key') > return kwargs > > def form_valid(self, form): > photo = PhotoForm(self.request.POST, self.request.FILES) # > form.save(commit=False) > url = form.cleaned_data['property_key'] > photo.property = Property.objects.get(url_uuid=url) > photo.save() > return super(AddPhotos, self).form_valid(form) > > def get_context_data(self, **kwargs): > context = super(AddPhotos, self).get_context_data(**kwargs) > context['property_key'] = self.kwargs.get('key') > context['property_obj'] = > Property.objects.get(url_uuid=self.kwargs.get('key')) > return context > > The form part of the template (mostly to show that the image input is > within the form : > > <form method="post" id="upload-form" action="." class="responsive-form > card row"> > {{ form.errors }} > {% csrf_token %} > {{ form.property_key }} > <h1>Add Photos for - {{ property_obj.title }}</h1> > {{ form.as_p }} > > <div class="col-md-12 form-option form-actions"> > <div class="col-md-12"> > <button name="submit" class="btn btn-default btn-block" > value="Upload" id="submit" type="submit"> > Upload > </button> > </div> > > </div> > </form> > > I'd appreciate a code review that will tell me which mis-placed semi-colon > is causing my errors. > > Thanks! > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit > https://groups.google.com/d/msgid/django-users/CA%2BePoMysqRa-Dqk8sUJ67mr4y2mQBbs2eDpqMVGN6NP9fj7f-A%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CA%2BePoMysqRa-Dqk8sUJ67mr4y2mQBbs2eDpqMVGN6NP9fj7f-A%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CALn3ei0m-OaF5nYQR7gWsHvuXs21oODv1YTCnVfKQOWu%2BWqtkw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

