Django

Code

Changeset 1519

Show
Ignore:
Timestamp:
12/01/05 00:36:47 (3 years ago)
Author:
adrian
Message:

Fixed #816 -- FileFields? now work in the create_update generic view. Thanks, limodou

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/AUTHORS

    r1511 r1519  
    5959    Stuart Langridge <http://www.kryogenix.org/> 
    6060    Eugene Lazutkin <http://lazutkin.com/blog/> 
     61    limodou 
    6162    Martin Maney <http://www.chipy.org/Martin_Maney> 
    6263    Maniac <http://www.softwaremaniacs.org/> 
  • django/trunk/django/views/generic/create_update.py

    r1434 r1519  
    11from django import models 
    22from django.core.xheaders import populate_xheaders 
    3 from django.core import template_loader, formfields 
     3from django.core import template_loader, formfields, meta 
    44from django.views.auth.login import redirect_to_login 
    55from django.core.extensions import DjangoContext as Context 
     
    88from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfigured 
    99 
    10 def create_object(request, app_label, module_name, template_name=None,  
    11                  template_loader=template_loader, extra_context={},  
     10def create_object(request, app_label, module_name, template_name=None, 
     11                 template_loader=template_loader, extra_context={}, 
    1212                 post_save_redirect=None, login_required=False, follow=None): 
    1313    """ 
    1414    Generic object-creation function. 
    15      
     15 
    1616    Templates: ``<app_label>/<module_name>_form`` 
    1717    Context: 
     
    2121    if login_required and request.user.is_anonymous(): 
    2222        return redirect_to_login(request.path) 
    23          
     23 
    2424    mod = models.get_module(app_label, module_name) 
    2525    manipulator = mod.AddManipulator(follow=follow) 
     
    2727        # If data was POSTed, we're trying to create a new object 
    2828        new_data = request.POST.copy() 
    29          
     29 
     30        if mod.Klass._meta.has_field_type(meta.FileField): 
     31            new_data.update(request.FILES) 
     32 
    3033        # Check for errors 
    3134        errors = manipulator.get_validation_errors(new_data) 
    3235        manipulator.do_html2python(new_data) 
    33          
     36 
    3437        if not errors: 
    3538            # No errors -- this means we can save the data! 
    3639            new_object = manipulator.save(new_data) 
    37              
     40 
    3841            if not request.user.is_anonymous(): 
    3942                request.user.add_message("The %s was created sucessfully." % mod.Klass._meta.verbose_name) 
    40              
     43 
    4144            # Redirect to the new object: first by trying post_save_redirect, 
    4245            # then by obj.get_absolute_url; fail if neither works. 
     
    5154        errors = {} 
    5255        new_data = manipulator.flatten_data() 
    53      
     56 
    5457    # Create the FormWrapper, template, context, response 
    5558    form = formfields.FormWrapper(manipulator, new_data, errors) 
     
    6366        if callable(value): 
    6467            c[key] = value() 
    65         else:    
     68        else: 
    6669            c[key] = value 
    6770    return HttpResponse(t.render(c)) 
    6871 
    69 def update_object(request, app_label, module_name, object_id=None, slug=None,  
     72def update_object(request, app_label, module_name, object_id=None, slug=None, 
    7073                  slug_field=None, template_name=None, template_loader=template_loader, 
    71                   extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None,  
     74                  extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None, 
    7275                  login_required=False, follow=None): 
    7376    """ 
     
    8588 
    8689    mod = models.get_module(app_label, module_name) 
    87      
     90 
    8891    # Look up the object to be edited 
    8992    lookup_kwargs = {} 
     
    99102    except ObjectDoesNotExist: 
    100103        raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs)) 
    101      
     104 
    102105    manipulator = mod.ChangeManipulator(object.id, follow=follow) 
    103      
     106 
    104107    if request.POST: 
    105108        new_data = request.POST.copy() 
     
    108111        if not errors: 
    109112            manipulator.save(new_data) 
    110              
     113 
    111114            if not request.user.is_anonymous(): 
    112115                request.user.add_message("The %s was updated sucessfully." % mod.Klass._meta.verbose_name) 
     
    123126        # This makes sure the form acurate represents the fields of the place. 
    124127        new_data = manipulator.flatten_data() 
    125      
     128 
    126129    form = formfields.FormWrapper(manipulator, new_data, errors) 
    127130    if not template_name: 
     
    135138        if callable(value): 
    136139            c[key] = value() 
    137         else:    
     140        else: 
    138141            c[key] = value 
    139142    response = HttpResponse(t.render(c)) 
     
    141144    return response 
    142145 
    143 def delete_object(request, app_label, module_name, post_delete_redirect,  
    144                   object_id=None, slug=None, slug_field=None, template_name=None,  
    145                   template_loader=template_loader, extra_lookup_kwargs={},  
     146def delete_object(request, app_label, module_name, post_delete_redirect, 
     147                  object_id=None, slug=None, slug_field=None, template_name=None, 
     148                  template_loader=template_loader, extra_lookup_kwargs={}, 
    146149                  extra_context={}, login_required=False): 
    147150    """ 
    148151    Generic object-delete function. 
    149      
    150     The given template will be used to confirm deletetion if this view is  
     152 
     153    The given template will be used to confirm deletetion if this view is 
    151154    fetched using GET; for safty, deletion will only be performed if this 
    152155    view is POSTed. 
     
    161164 
    162165    mod = models.get_module(app_label, module_name) 
    163      
     166 
    164167    # Look up the object to be edited 
    165168    lookup_kwargs = {} 
     
    175178    except ObjectDoesNotExist: 
    176179        raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs)) 
    177      
     180 
    178181    if request.META['REQUEST_METHOD'] == 'POST': 
    179182        object.delete() 
     
    191194            if callable(value): 
    192195                c[key] = value() 
    193             else:    
     196            else: 
    194197                c[key] = value 
    195198        response = HttpResponse(t.render(c))