Ticket #5894: diff.7.diff

File diff.7.diff, 5.3 KB (added by Alex Gaynor, 16 years ago)

Fixes a stupid typo from the previous version

  • django/db/models/fields/__init__.py

     
    814814        self.path, self.match, self.recursive = path, match, recursive
    815815        kwargs['max_length'] = kwargs.get('max_length', 100)
    816816        Field.__init__(self, verbose_name, name, **kwargs)
     817   
     818    def formfield(self, **kwargs):
     819        defaults = {
     820            'path': self.path,
     821            'match': self.match,
     822            'recursive': self.recursive,
     823            'form_class': forms.FilePathField,
     824        }
     825        defaults.update(kwargs)
     826        return super(FilePathField, self).formfield(**defaults)
    817827
    818828    def get_manipulator_field_objs(self):
    819829        return [curry(oldforms.FilePathField, path=self.path, match=self.match, recursive=self.recursive)]
  • django/newforms/fields.py

     
    44
    55import copy
    66import datetime
     7import os
    78import re
    89import time
    910# Python 2.3 fallbacks
     
    3132    'RegexField', 'EmailField', 'FileField', 'ImageField', 'URLField',
    3233    'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
    3334    'ComboField', 'MultiValueField', 'FloatField', 'DecimalField',
    34     'SplitDateTimeField', 'IPAddressField',
     35    'SplitDateTimeField', 'IPAddressField', 'FilePathField',
    3536)
    3637
    3738# These values, if given to to_python(), will trigger the self.required check.
     
    750751
    751752    def __init__(self, *args, **kwargs):
    752753        super(IPAddressField, self).__init__(ipv4_re, *args, **kwargs)
     754
     755class FilePathField(ChoiceField):
     756    def __init__(self, path, match=None, recursive=False, required=True, widget=Select, label=None, initial=None, help_text=None, *args, **kwargs):
     757        self.path, self.match, self.recursive = path, match, recursive
     758        super(FilePathField, self).__init__(choices=(), required=required, widget=widget, label=label, initial=initial, help_text=help_text, *args, **kwargs)
     759        self.choices = []
     760        if self.match is not None:
     761            self.match_re = re.compile(self.match)
     762        if recursive:
     763            for root, dirs, files in os.walk(self.path):
     764                for f in files:
     765                    if self.match is None or self.match_re.search(f):
     766                        f = os.path.join(root, f)
     767                        self.choices.append(f, f.replace(self.path, "", 1))
     768        else:
     769            try:
     770                for f in os.listdir(self.path):
     771                    full_file = os.path.join(self.path, f)
     772                    if os.path.isfile(full_file) and (self.match is None or self.match_re.search(f)):
     773                        self.choices.append((full_file, f))
     774            except OSError:
     775                pass
     776        self.widget.choices = self.choices
  • tests/regressiontests/forms/fields.py

     
    11061106>>> f.clean(None)
    11071107u''
    11081108
     1109# FilePathField ###############################################################
     1110
     1111>>> import re
     1112>>> from django import newforms as forms
     1113>>> loc = forms.__file__
     1114>>> m = re.search(r'(.*?)/__init__\..*$', loc)
     1115>>> loc = m.group(1) + '/'
     1116>>> loc
     1117'.../django/newforms/'
     1118>>> f = forms.FilePathField(path=loc)
     1119>>> f.choices
     1120[('.../django/newforms/forms.py', 'forms.py'), ('.../django/newforms/__init__.pyc', '__init__.pyc'), ('.../django/newforms/__init__.py', '__init__.py'), ('.../django/newforms/models.pyc', 'models.pyc'), ('.../django/newforms/forms.pyc', 'forms.pyc'), ('.../django/newforms/util.pyc', 'util.pyc'), ('.../django/newforms/widgets.py', 'widgets.py'), ('.../django/newforms/widgets.pyc', 'widgets.pyc'), ('.../django/newforms/fields.py', 'fields.py'), ('.../django/newforms/util.py', 'util.py'), ('.../django/newforms/models.py', 'models.py'), ('.../django/newforms/fields.pyc', 'fields.pyc')]
     1121>>> f.clean('fields.py')
     1122Traceback (most recent call last):
     1123...
     1124ImportError: Environment variable DJANGO_SETTINGS_MODULE is undefined so settings cannot be imported.
     1125>>> f.clean('.../django/newforms/fields.py')
     1126u'.../django/newforms/fields.py'
     1127
    11091128# SplitDateTimeField ##########################################################
    11101129
    11111130>>> f = SplitDateTimeField()
  • docs/newforms.txt

     
    13451345
    13461346.. _`bind the file data to the form`: `Binding uploaded files to a form`_
    13471347
     1348``FilePathField``
     1349~~~~~~~~~~~~~~
     1350
     1351**New in Django development version**
     1352
     1353    * Default widget: ``Select``
     1354    * Empty value: ``None``
     1355    * Normalizes to: A unicode object
     1356    * Validates that the selected choice exists in the list of choices.
     1357    * Error message keys: ``required``, ``invalid_choice``
     1358
     1359The choices are generated from the filesystem.  They can be forced to match a specific regulat expression(this only matches the file, not the entire path).  It can also be recursive.
     1360
    13481361``ImageField``
    13491362~~~~~~~~~~~~~~
    13501363
Back to Top