Ошибка: "get" не является известным атрибутом "None" (reportOptionalMemberAccess)
Я использую PyRight для проверки моего кода на Django. Он жалуется на то, что
class FooForm(ModelForm):
def clean(self):
cleaned_data = super().clean()
start = cleaned_data.get("start_date") # <------- here
ошибка: "get" не является известным атрибутом "None" (reportOptionalMemberAccess)
Я установил django-stubs.
Как заставить PyRight осознать, что cleaned_data - это словарь?
Или что-то не так с моими настройками?
Ожидается, что метод clean() из ModelForm возвращает словарь, с точки зрения средства проверки типов, такого как Pyright, базовый класс super().clean() (вероятно, в общем случае) не является гарантированно сделаю это.
Вы можете попробовать явно ввести подсказку для переменной cleaned_data.
class FooForm(ModelForm):
def clean(self) -> Dict[str, Any]:
cleaned_data: Dict[str, Any] = super().clean()
start = cleaned_data.get("start_date")
django-stub Помечает его необязательным, как мы можем видеть в исходном коде:
class BaseForm(RenderableFormMixin): # ... def clean(self) -> dict[str, Any] | None: ...
Проблема обсуждается в выпуске #1403:
Подклассам Form разрешено не возвращать словарь, поэтому в поле type в form должно быть указано значение none. Смотрите предыдущую проблему #954. Пожалуйста, проверьте систему отслеживания проблем, прежде чем открывать проблемы.
Таким образом, вам разрешено переопределять def clean() и возвращать None, на самом деле это делает FormSet. Возможно, тогда программисту следует прокомментировать это, но, вероятно, с точки зрения проверки типов имеет смысл сделать это необязательным.