Django

Code

Show
Ignore:
Timestamp:
03/24/08 18:46:24 (8 months ago)
Author:
brosner
Message:

newforms-admin: Fixed #6866 -- ModelAdmin?.get_form and InlineModelAdmin?.get_formset now uses BaseModelAdmin?.form so the form class can be changed out very easily.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/newforms-admin/django/contrib/admin/options.py

    r7278 r7360  
    130130    fields = None 
    131131    fieldsets = None 
     132    form = forms.ModelForm 
    132133    filter_vertical = () 
    133134    filter_horizontal = () 
     
    309310        Returns a Form class for use in the admin add view. This is used by 
    310311        add_view and change_view. 
    311          
    312         Note that if you override this method, your form will *not* 
    313         automatically get the custom admin widgets. raw_id_fields, fields, 
    314         fieldsets, filter_vertical, and filter_horizonal will not apply to 
    315         your form. You will have manually specify those widgets. 
    316312        """ 
    317313        if self.declared_fieldsets: 
     
    319315        else: 
    320316            fields = None 
    321         return _modelform_factory(self.model, fields=fields, formfield_callback=self.formfield_for_dbfield) 
     317        return _modelform_factory(self.model, form=self.form, fields=fields, formfield_callback=self.formfield_for_dbfield) 
    322318 
    323319    def get_formsets(self, request, obj=None): 
     
    705701        else: 
    706702            fields = None 
    707         return _inlineformset_factory(self.parent_model, self.model, fk_name=self.fk_name, fields=fields, formfield_callback=self.formfield_for_dbfield, extra=self.extra) 
     703        return _inlineformset_factory(self.parent_model, self.model, form=self.form, fk_name=self.fk_name, fields=fields, formfield_callback=self.formfield_for_dbfield, extra=self.extra) 
    708704 
    709705    def get_fieldsets(self, request, obj=None): 
  • django/branches/newforms-admin/django/newforms/models.py

    r7351 r7360  
    278278 
    279279# XXX: This API *will* change. Use at your own risk. 
    280 def _modelform_factory(model, form=BaseForm, fields=None, exclude=None, 
     280def _modelform_factory(model, form=ModelForm, fields=None, exclude=None, 
    281281                       formfield_callback=lambda f: f.formfield()): 
    282282    # HACK: we should be able to construct a ModelForm without creating 
     
    288288    setattr(Meta, 'exclude', exclude) 
    289289    class_name = model.__name__ + 'Form' 
    290     return ModelFormMetaclass(class_name, (ModelForm,), {'Meta': Meta}, 
     290    return ModelFormMetaclass(class_name, (form,), {'Meta': Meta}, 
    291291                              formfield_callback=formfield_callback) 
    292292 
     
    361361 
    362362# XXX: Use at your own risk. This API *will* change. 
    363 def _modelformset_factory(model, form=BaseModelForm, formfield_callback=lambda f: f.formfield(), 
     363def _modelformset_factory(model, form=ModelForm, formfield_callback=lambda f: f.formfield(), 
    364364                          formset=BaseModelFormSet, 
    365365                          extra=1, can_delete=False, can_order=False, 
     
    428428 
    429429# XXX: This API *will* change. Use at your own risk. 
    430 def _inlineformset_factory(parent_model, model, form=BaseModelForm, fk_name=None, 
     430def _inlineformset_factory(parent_model, model, form=ModelForm, fk_name=None, 
    431431                           fields=None, exclude=None, 
    432432                           extra=3, can_order=False, can_delete=True, 
  • django/branches/newforms-admin/tests/regressiontests/modeladmin/models.py

    r7275 r7360  
    55    name = models.CharField(max_length=100) 
    66    bio = models.TextField() 
     7    sign_date = models.DateField() 
    78 
    89 
     
    2728 
    2829>>> ma.get_form(request).base_fields.keys() 
    29 ['name', 'bio'
     30['name', 'bio', 'sign_date'
    3031 
    3132 
     
    4142>>> ma = ModelAdmin(Band, site) 
    4243>>> ma.get_fieldsets(request) 
    43 [(None, {'fields': ['name', 'bio']})] 
     44[(None, {'fields': ['name', 'bio', 'sign_date']})] 
    4445>>> ma.get_fieldsets(request, band) 
    45 [(None, {'fields': ['name', 'bio']})] 
     46[(None, {'fields': ['name', 'bio', 'sign_date']})] 
    4647 
    4748 
     
    8687 
    8788 
     89If we specify a form, it should use it allowing custom validation to work 
     90properly. This won't, however, break any of the admin widgets or media. 
    8891 
     92>>> from django import newforms as forms 
     93>>> class AdminBandForm(forms.ModelForm): 
     94...     delete = forms.BooleanField() 
     95...      
     96...     class Meta: 
     97...         model = Band 
     98 
     99>>> class BandAdmin(ModelAdmin): 
     100...     form = AdminBandForm 
     101 
     102>>> ma = BandAdmin(Band, site) 
     103>>> ma.get_form(request).base_fields.keys() 
     104['name', 'bio', 'sign_date', 'delete'] 
     105>>> type(ma.get_form(request).base_fields['sign_date'].widget) 
     106<class 'django.contrib.admin.widgets.AdminDateWidget'> 
    89107 
    90108"""