Справка по ошибке проверки форм администратора
-
07-07-2019 - |
Вопрос
Я довольно новичок в Django, у меня возникает несколько проблем с проверкой формы в модуле администратора, более конкретно, с созданием исключений в ModelForm.Я могу проверять данные и манипулировать ими чистыми методами, но похоже, не могу вызвать никаких ошибок.Всякий раз, когда я включаю какое-либо утверждение raise , я получаю эту ошибку "Объект 'NoneType' не имеет атрибута 'ValidationError'".Когда я удаляю часть повышения, все работает отлично.
Затем, если я повторно импортирую django.forms (внутри метода clean) с другим псевдонимом (напримериз форм импорта django как blahbalh), то я могу создавать сообщения, используя blahblah.Исключение ValidateException.
Есть какие - нибудь советы или пожелания по правильному выполнению подобных действий ?
Вот пример того, что я делаю в Admin.py:
admin.py
из django импортируйте формы из proj.models импортируйте * из django.contrib импортируйте admin
класс FontAdminForm(формы.ModelForm):
class Meta:
model = Font
def clean_name(self):
return self.cleaned_data["name"].upper()
def clean_description(self):
desc = self.cleaned_data['description']
if desc and if len(desc) < 10:
raise forms.ValidationError('Description is too short.')
return desc
администратор класса (admin.Администратор модели):
form = FontAdminForm
list_display = ['name', 'description']
администратор.сайт.регистрация (Шрифт, FontAdmin)
-- Спасибо, А
Решение
Ваша проблема может быть в * импорте.
from proj.models import *
если proj.models содержит какую-либо переменную с именем forms (включая некоторый модуль импорта типа "из django import forms"), это может помешать вашему первоначальному импорту:
from django import forms
Я бы явно импортировал из proj.models, например
from proj.models import Font
Если это не сработает, посмотрите, есть ли какие-либо другие переменные с именем "forms", которые могут нарушать вашу область видимости.
Вы можете использовать самоанализ, чтобы увидеть, что такое "формы".Внутри вашего метода clean_description:
print forms.__package__
Я предполагаю, что это не будет "django" (или вернет ошибку, указывающую, что это определенно не django.forms).