Loading django/forms/fields.py +8 −1 Original line number Diff line number Diff line Loading @@ -829,9 +829,15 @@ class FilePathField(ChoiceField): super(FilePathField, self).__init__(choices=(), required=required, widget=widget, label=label, initial=initial, help_text=help_text, *args, **kwargs) if self.required: self.choices = [] else: self.choices = [("", "---------")] if self.match is not None: self.match_re = re.compile(self.match) if recursive: for root, dirs, files in os.walk(self.path): for f in files: Loading @@ -846,6 +852,7 @@ class FilePathField(ChoiceField): self.choices.append((full_file, f)) except OSError: pass self.widget.choices = self.choices class SplitDateTimeField(MultiValueField): Loading tests/regressiontests/model_forms_regress/models.py +13 −0 Original line number Diff line number Diff line import os from django.db import models from django import forms Loading @@ -12,6 +13,9 @@ class Triple(models.Model): class Meta: unique_together = (('left', 'middle'), ('middle', 'right')) class FilePathModel(models.Model): path = models.FilePathField(path=os.path.dirname(__file__), match=".*\.py$", blank=True) __test__ = {'API_TESTS': """ When the same field is involved in multiple unique_together constraints, we need to make sure we don't remove the data for it before doing all the Loading @@ -28,5 +32,14 @@ False >>> form = TripleForm({'left': '1', 'middle': '3', 'right': '1'}) >>> form.is_valid() True # Regression test for #8842: FilePathField(blank=True) >>> class FPForm(forms.ModelForm): ... class Meta: ... model = FilePathModel >>> form = FPForm() >>> [c[1] for c in form['path'].field.choices] ['---------', '__init__.py', 'models.py'] """} Loading
django/forms/fields.py +8 −1 Original line number Diff line number Diff line Loading @@ -829,9 +829,15 @@ class FilePathField(ChoiceField): super(FilePathField, self).__init__(choices=(), required=required, widget=widget, label=label, initial=initial, help_text=help_text, *args, **kwargs) if self.required: self.choices = [] else: self.choices = [("", "---------")] if self.match is not None: self.match_re = re.compile(self.match) if recursive: for root, dirs, files in os.walk(self.path): for f in files: Loading @@ -846,6 +852,7 @@ class FilePathField(ChoiceField): self.choices.append((full_file, f)) except OSError: pass self.widget.choices = self.choices class SplitDateTimeField(MultiValueField): Loading
tests/regressiontests/model_forms_regress/models.py +13 −0 Original line number Diff line number Diff line import os from django.db import models from django import forms Loading @@ -12,6 +13,9 @@ class Triple(models.Model): class Meta: unique_together = (('left', 'middle'), ('middle', 'right')) class FilePathModel(models.Model): path = models.FilePathField(path=os.path.dirname(__file__), match=".*\.py$", blank=True) __test__ = {'API_TESTS': """ When the same field is involved in multiple unique_together constraints, we need to make sure we don't remove the data for it before doing all the Loading @@ -28,5 +32,14 @@ False >>> form = TripleForm({'left': '1', 'middle': '3', 'right': '1'}) >>> form.is_valid() True # Regression test for #8842: FilePathField(blank=True) >>> class FPForm(forms.ModelForm): ... class Meta: ... model = FilePathModel >>> form = FPForm() >>> [c[1] for c in form['path'].field.choices] ['---------', '__init__.py', 'models.py'] """}