Fixed #8422: FilePathField now respects required=False.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10447 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2009-04-08 18:53:55 +00:00
parent 98ef7e85bd
commit a64a61bf4a
2 changed files with 21 additions and 1 deletions

View File

@ -829,9 +829,15 @@ class FilePathField(ChoiceField):
super(FilePathField, self).__init__(choices=(), required=required, super(FilePathField, self).__init__(choices=(), required=required,
widget=widget, label=label, initial=initial, help_text=help_text, widget=widget, label=label, initial=initial, help_text=help_text,
*args, **kwargs) *args, **kwargs)
self.choices = []
if self.required:
self.choices = []
else:
self.choices = [("", "---------")]
if self.match is not None: if self.match is not None:
self.match_re = re.compile(self.match) self.match_re = re.compile(self.match)
if recursive: if recursive:
for root, dirs, files in os.walk(self.path): for root, dirs, files in os.walk(self.path):
for f in files: for f in files:
@ -846,6 +852,7 @@ class FilePathField(ChoiceField):
self.choices.append((full_file, f)) self.choices.append((full_file, f))
except OSError: except OSError:
pass pass
self.widget.choices = self.choices self.widget.choices = self.choices
class SplitDateTimeField(MultiValueField): class SplitDateTimeField(MultiValueField):

View File

@ -1,3 +1,4 @@
import os
from django.db import models from django.db import models
from django import forms from django import forms
@ -12,6 +13,9 @@ class Triple(models.Model):
class Meta: class Meta:
unique_together = (('left', 'middle'), ('middle', 'right')) 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': """ __test__ = {'API_TESTS': """
When the same field is involved in multiple unique_together constraints, we 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 need to make sure we don't remove the data for it before doing all the
@ -28,5 +32,14 @@ False
>>> form = TripleForm({'left': '1', 'middle': '3', 'right': '1'}) >>> form = TripleForm({'left': '1', 'middle': '3', 'right': '1'})
>>> form.is_valid() >>> form.is_valid()
True 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']
"""} """}