Opened 2 years ago

Closed 2 years ago

Last modified 2 years ago

#33254 closed Uncategorized (invalid)

Issue with django.forms.fields.FilePathField() and callable path

Reported by: Chakib Owned by: nobody
Component: Forms Version: 3.2
Severity: Normal Keywords: FilePathField
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Hi,

First post here, so I don't know if it's the correct channel for this kind of issue.
Sorry if it's not.

Since v 3.0 we can set path attribute as a callable in a models.fields.FilePathField(),
as discussed here:
https://code.djangoproject.com/ticket/29529

and documented here:
https://docs.djangoproject.com/en/3.0/ref/models/fields/#django.db.models.FilePathField.path

The commit adding this feature can be found here:
https://github.com/django/django/commit/ef082ebb84f00e38af4e8880d04e8365c2766d34

I have an issue when I try to use django.forms.fields.FilePathField()
https://github.com/django/django/blob/stable/3.2.x/django/forms/fields.py#L1095

In the case where path is defined as a callable, and "os.scandir(self.path)" is called (as showed in https://github.com/django/django/blob/stable/3.2.x/django/forms/fields.py#L1126).
I have this explicit error:
"scandir: path should be string, bytes, os.PathLike, integer or None, not function"

If I monkey-patch "self.path" in the __init__ method with a pre-check similar to what it was done for the added feature https://github.com/django/django/blob/stable/3.2.x/django/db/models/fields/__init__.py#L1711
it seems to solve this issue.

...
path = self.path() if callable(self.path) else self.path
for f in os.scandir(path):
...

I don't know if it's a bug or if I miss something using models.fields.FilePathField() and django.forms.fields.FilePathField()

Change History (2)

comment:1 by Mariusz Felisiak, 2 years ago

Resolution: invalid
Status: newclosed

models.FilePathField accepts a callable path, but forms.FilePathField doesn't.

Note: See TracTickets for help on using tickets.
Back to Top