#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()
models.FilePathField
accepts a callablepath
, butforms.FilePathField
doesn't.