Django

Code

Changeset 6839

Show
Ignore:
Timestamp:
12/02/07 12:22:36 (9 months ago)
Author:
jkocherhans
Message:

newforms-admin: Removed formset_for_queryset. BaseModelFormSet?'s constructor now takes a queryset argument instead.

Files:

Legend:

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

    r6777 r6839  
    1616__all__ = ( 
    1717    'save_instance', 'form_for_model', 'form_for_instance', 'form_for_fields', 
    18     'formset_for_model', 'formset_for_queryset', 'inline_formset', 
     18    'formset_for_model', 'inline_formset', 
    1919    'ModelChoiceField', 'ModelMultipleChoiceField', 
    2020) 
     
    279279    queryset = None 
    280280 
    281     def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None): 
     281    def __init__(self, qs, data=None, files=None, auto_id='id_%s', prefix=None): 
    282282        kwargs = {'data': data, 'files': files, 'auto_id': auto_id, 'prefix': prefix} 
    283         if self.queryset: 
    284             kwargs['initial'] = [initial_data(obj) for obj in self.get_queryset()
     283        self.queryset = qs 
     284        kwargs['initial'] = [initial_data(obj) for obj in qs
    285285        super(BaseModelFormSet, self).__init__(**kwargs) 
    286  
    287     def get_queryset(self): 
    288         return self.queryset._clone() 
    289286 
    290287    def save_new(self, form, commit=True): 
     
    307304        # Put the objects from self.get_queryset into a dict so they are easy to lookup by pk 
    308305        existing_objects = {} 
    309         for obj in self.get_queryset()
     306        for obj in self.queryset
    310307            existing_objects[obj._get_pk_val()] = obj 
    311308        saved_instances = [] 
     
    337334        super(BaseModelFormSet, self).add_fields(form, index) 
    338335 
    339 def formset_for_queryset(queryset, form=BaseForm, formfield_callback=lambda f: f.formfield(), 
    340                          formset=BaseModelFormSet, extra=1, orderable=False, deletable=False, fields=None): 
    341     """ 
    342     Returns a FormSet class for the given QuerySet. This FormSet will contain 
    343     change forms for every instance in the QuerySet as well as the number of 
    344     add forms specified by ``extra``. 
    345      
    346     Provide ``extra`` to determine the number of add forms to display. 
    347      
    348     Provide ``deletable`` if you want to allow the formset to delete any 
    349     objects in the given queryset. 
    350      
    351     Provide ``form`` if you want to use a custom BaseForm subclass. 
    352      
    353     Provide ``formfield_callback`` if you want to define different logic for 
    354     determining the formfield for a given database field. It's a callable that 
    355     takes a database Field instance and returns a form Field instance. 
    356      
    357     Provide ``formset`` if you want to use a custom BaseModelFormSet subclass. 
    358     """ 
    359     form = form_for_model(queryset.model, form=form, fields=fields, formfield_callback=formfield_callback) 
    360     FormSet = formset_for_form(form, formset, extra, orderable, deletable) 
    361     FormSet.model = queryset.model 
    362     FormSet.queryset = queryset 
    363     return FormSet 
    364  
    365336def formset_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formfield(), 
    366337                      formset=BaseModelFormSet, extra=1, orderable=False, deletable=False, fields=None): 
     
    373344    uses the model's default manager to determine the queryset. 
    374345    """ 
    375     qs = model._default_manager.all() 
    376     return formset_for_queryset(qs, form, formfield_callback, formset, extra, orderable, deletable, fields) 
     346    form = form_for_model(model, form=form, fields=fields, formfield_callback=formfield_callback) 
     347    FormSet = formset_for_form(form, formset, extra, orderable, deletable) 
     348    FormSet.model = model 
     349    return FormSet 
    377350 
    378351class InlineFormset(BaseModelFormSet): 
     
    383356        # is there a better way to get the object descriptor? 
    384357        self.rel_name = RelatedObject(self.fk.rel.to, self.model, self.fk).get_accessor_name() 
    385         super(InlineFormset, self).__init__(data, files, prefix=self.rel_name) 
     358        qs = self.get_queryset() 
     359        super(InlineFormset, self).__init__(qs, data, files, prefix=self.rel_name) 
    386360 
    387361    def get_queryset(self): 
     
    391365        """ 
    392366        kwargs = {self.fk.name: self.instance} 
    393         return self.queryset.filter(**kwargs) 
     367        return self.model._default_manager.filter(**kwargs) 
    394368 
    395369    def save_new(self, form, commit=True): 
    396         kwargs = {self.fk.get_attname(): self.instance._get_pk_val()
     370        kwargs = {self.fk.get_attname(): self.instance.pk
    397371        new_obj = self.model(**kwargs) 
    398372        return save_instance(form, new_obj, commit=commit) 
  • django/branches/newforms-admin/tests/modeltests/model_formsets/models.py

    r6655 r6839  
    1717__test__ = {'API_TESTS': """ 
    1818 
    19 >>> from django.newforms.models import formset_for_queryset, formset_for_model 
     19>>> from django.newforms.models import formset_for_model 
    2020 
    2121>>> qs = Author.objects.all() 
    2222>>> AuthorFormSet = formset_for_model(Author, extra=3) 
    2323 
    24 >>> formset = AuthorFormSet(
     24>>> formset = AuthorFormSet(qs
    2525>>> for form in formset.forms: 
    2626...     print form.as_p() 
     
    3636... } 
    3737 
    38 >>> formset = AuthorFormSet(data=data) 
     38>>> formset = AuthorFormSet(qs, data=data) 
    3939>>> formset.is_valid() 
    4040True 
     
    5555 
    5656>>> qs = Author.objects.order_by('name') 
    57 >>> AuthorFormSet = formset_for_queryset(qs, extra=1, deletable=False) 
    58  
    59 >>> formset = AuthorFormSet(
     57>>> AuthorFormSet = formset_for_model(Author, extra=1, deletable=False) 
     58 
     59>>> formset = AuthorFormSet(qs
    6060>>> for form in formset.forms: 
    6161...     print form.as_p() 
     
    7474... } 
    7575 
    76 >>> formset = AuthorFormSet(data=data) 
     76>>> formset = AuthorFormSet(qs, data=data) 
    7777>>> formset.is_valid() 
    7878True 
     
    9292 
    9393>>> qs = Author.objects.order_by('name') 
    94 >>> AuthorFormSet = formset_for_queryset(qs, extra=1, deletable=True) 
    95  
    96 >>> formset = AuthorFormSet(
     94>>> AuthorFormSet = formset_for_model(Author, extra=1, deletable=True) 
     95 
     96>>> formset = AuthorFormSet(qs
    9797>>> for form in formset.forms: 
    9898...     print form.as_p() 
     
    118118... } 
    119119 
    120 >>> formset = AuthorFormSet(data=data) 
     120>>> formset = AuthorFormSet(qs, data=data) 
    121121>>> formset.is_valid() 
    122122True