Вопрос

Я довольно новичок в 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top