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.