The problem is here: if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES)
You need to make sure you always pass in show_title correctly when instantiating the form. Regards Knut On Tue, Nov 9, 2010 at 3:57 AM, Ed <edmund.rog...@gmail.com> wrote: > I can fall back on the subclassing suggestion. But I'd like to give > this one more shot for a fix. I think it has something to do with the > request.FILES that I need. Here is my complete form: > > class UploadFileForm(forms.Form): > def __init__(self, show_title=True, *args, **kwargs): > super(UploadFileForm, self).__init__(*args, **kwargs) > if not show_title: > del self.fields['title'] > > def clean_file(self): > content = self.cleaned_data['file'] > content_type = content.content_type.split('/')[0] > if content_type in settings.CONTENT_TYPES: > if content._size > settings.MAX_UPLOAD_SIZE: > raise forms.ValidationError(_('Please keep > filesize under %s. > Current filesize %s') % (filesizeformat(settings.MAX_UPLOAD_SIZE), > filesizeformat(content._size))) > else: > raise forms.ValidationError(_('File type is not > supported')) > return content > > title = forms.CharField(max_length=50) > file = forms.ImageField(label='Select photo to upload') > > > And here is my complete view: > > def upload_file(request, modelname, id): > if modelname == 'film': > form = UploadFileForm() > else: > form = UploadFileForm(show_title=False) > > object = get_object_or_404(modelname, id__iexact=id) > if request.method == 'POST': > form = UploadFileForm(request.POST, request.FILES) > if form.is_valid(): > file = request.FILES["file"] > filename = file.name > content = file.read() > > # Assign unique name to file > new_image_name, extension = unique_name(filename, > object, > modelname) > > #FUTURE: Resize middle and resize remaining in > background > #SMALL > #img_resizer(content) > u_small = new_image_name + '_small.jpg' > store_in_s3(u_small, img_resizer(content,250,250,90)) > > # Save thumbnail url to object > object.url_small = u_small > object.save() > > # Grab Next param to determine where to redirect back > to > redirect_to = request.GET.get('next', > reverse('index_view')) > return HttpResponseRedirect(redirect_to) > else: > # If form validation fails, use original reverse url > redirect_to = request.GET.get('next', > reverse('index_view')) > > else: > # If first loading form, grab referer and pass to form > referer = request.META.get('HTTP_REFERER', None) > > # Pass original location in next url param > if referer is None: > redirect_to = reverse('index_view') > else: > try: > redirect_to = urlsplit(referer, 'http', > False)[2] > except IndexError: > redirect_to = reverse('index_view') > > > return render_to_response('upload.html', {'form': form,'obj': > object,'redirect_to':redirect_to}, context_instance = > RequestContext(request)) > > If I remove the def __init__ from the form class, it works perfectly, > but always shows the title. But with that in the form class, it > always says "This field is required." For just the imagefield if the > title is suppressed or for both the title and the imagefield if the > title is not suppressed. > > Suggestions? > > On Nov 8, 3:47 pm, Knut Ivar Nesheim <knu...@gmail.com> wrote: >> Maybe you could just use subclassing instead of doing stuff at run-time: >> >> class UploadForm(forms.Form): >> file = ... >> # custom upload and validation code here >> >> class ThumbnailUploadForm(UploadForm): >> pass >> >> class UploadFileForm(UploadForm): >> title = ... >> >> As for your current approach, it looks correct. I've done the same >> several times and it works as expected. Make sure you are really >> really passing show_title correctly in your thumbnail case. >> >> Regards >> Knut >> >> On Mon, Nov 8, 2010 at 9:29 PM, Ed <edmund.rog...@gmail.com> wrote: >> > I have an image upload form that takes a title and a file for its >> > field. I have two uses for it. Most of the time I call it, I need both >> > a title and the image itself. But when I call it simply to grab a >> > thumbnail, I don't need the title. In fact, the form data is saved to >> > a different model that doesn't even have title as a field. >> >> > I wanted to suppress the "title" field when I call the form. I could >> > have created two form classes in my forms.py, but this seemed >> > unnecessarily repetitious. >> >> > I included the following in my image form class: >> >> > def __init__ (self, show_title=True): >> > super (BaseClass, self).__init__() >> > if not show_title: >> > del self.fields['title'] >> >> > This works great except for one thing. Now I'm getting validation >> > errors: "This field is required" whether I suppress the title field or >> > not. Any time I try to submit the form, it tells me I need to enter >> > data. Any advice on how to do this correctly? >> >> > class UploadFileForm(forms.Form): >> > def __init__ (self, show_title=True): >> > super (BaseClass, self).__init__() >> > if not show_title: >> > del self.fields['title'] >> >> > title = forms.CharField(max_length=50) >> > file = forms.ImageField(label='Select photo to upload') >> >> > -- >> > You received this message because you are subscribed to the Google Groups >> > "Django users" group. >> > To post to this group, send email to django-us...@googlegroups.com. >> > To unsubscribe from this group, send email to >> > django-users+unsubscr...@googlegroups.com. >> > For more options, visit this group >> > athttp://groups.google.com/group/django-users?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.