Путаница с моделью и валидацией - Нужны советы - PullRequest
0 голосов
/ 03 марта 2009

Я немного новичок в Python, Django, и мне хотелось бы дать несколько советов о том, как создать код, который я хотел бы написать.

У меня написана модель, которая позволяет загружать файл. В методе сохранения моделей я проверяю, имеет ли файл конкретное расширение. Если у него есть расширение XML, я открываю файл и собираю некоторую информацию из файла для сохранения в базе данных. У меня эта модель работает. Я проверял это во встроенной администрации. Это работает.

В настоящее время, когда есть ошибка (это не файл XML; файл не может быть открыт; определенного атрибута не существует) Я выдаю специальную ошибку «Исключение». То, что я хотел бы , это то, как передать эти сообщения об ошибках «Исключение» в представление (будь то пользовательское представление или встроенное административное представление) и отобразить сообщение об ошибке, например, если библиотека форм использовался. Это возможно?

Я начинаю думать, что мне придется снова написать проверочные проверки с использованием библиотеки форм. Если это так, возможно ли по-прежнему использовать встроенный шаблон администрирования, но расширить форму, используемую для добавления этих пользовательских проверок?

Все, что поможет моей путанице, будет оценено.


UPDATE

Вот моя модель, для тех, кто спрашивает, "nzb" - это поле файла XML.
http://dpaste.com/hold/6101/

Интерфейс администратора будет использовать форму, которую вы ассоциируете с вашей моделью; ваши собственные взгляды также могут использовать форму.

Это именно то, что я хотел бы сделать. Однако я не знаю, как связать свои формы с моими моделями. Когда я когда-либо создавал формы в прошлом, они всегда действовали как их собственная сущность. Я никогда не мог заставить административные представления использовать их, используя класс ModelForm. Можете ли вы пролить свет на это?

Я прочитал ссылку, которую вы мне дали, и кажется, что я сделал это в прошлом, но не повезло.

Получение атрибутов из файла, вероятно, должно быть методом.

Извините, не могли бы вы уточнить это? А метод где?


UPDATE:

Похоже, я полностью пропустил этот шаг, чтобы связать форму с административным представлением. http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin

Теперь это должно позволить мне выполнить проверку в форме. Тем не менее, я все еще не понимаю, как на самом деле справиться с проверкой. С. Лотт говорит, что это должен быть метод?

Ответы [ 4 ]

4 голосов
/ 03 марта 2009

Ошибки формы автоматически становятся частью административного представления.

См. http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation

Вы будете счастливее, если подтвердите форму - для этого нужны формы. Интерфейс администратора будет использовать форму, которую вы ассоциируете с вашей моделью; ваши собственные взгляды также могут использовать форму.

Получение атрибутов из файла, вероятно, должно быть отдельным методом класса модели. Отдельный метод класса модели может использоваться методом save() класса модели или вызываться в другое время функциями представления.


«Я никогда не мог заставить административные представления использовать их при использовании класса ModelForm.»

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#form

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin


«Я все еще не понимаю, как на самом деле обрабатывать проверку. С.Лотт говорит, что это должен быть метод?»

Проверка в форме выполняется с помощью метода clean() или clean_somefield().

Ссылка «Добавление пользовательской проверки к администратору» (выше) показывает, как добавить метод clean_name в форму «MyArticleAdminForm».

Если вы все еще в замешательстве, попробуйте набрать код с веб-страницы Django и посмотрите, что он делает.

1 голос
/ 03 марта 2009

Вы можете предоставить форму, которая будет использоваться администратором сайта. Затем вы можете выполнить проверки в коде формы, который будет отображаться в области администратора.

См. Документы на сайте администратора, в частности атрибут формы ModelAdmin .

1 голос
/ 03 марта 2009

Полагаю, лучшим способом было бы реализовать специальный класс полей, расширяющий FileField, с пользовательской проверкой загруженного файла.

Проверка осуществляется в методе clean поля. Он должен проверить файл XML и поднять ValidationError s, если он обнаружит ошибки. Система администратора должна обрабатывать ваши пользовательские ошибки как любые другие ошибки поля.

Класс ImageField является хорошим примером специальной проверки, подобной этой, - я рекомендую просто прочитать источник .

0 голосов
/ 03 марта 2009

"Я выбрасываю" Ошибка "исключения" - Куда именно вы выкидываете исключение? В вашей модели или на ваш взгляд?

Я запутался в вашем вопросе, поэтому я предполагаю, что вы должны спросить: «Где я должен ловить ошибки ввода, если таковые имеются? 'себе.

Модель и вид, как я вижу, похожи на кусочки на маленькой сборочной линии. Проверка вида / формы - это первое действие, которое должно быть выполнено. Если есть какие-либо проблемы с входными данными через формы. Это должно быть предотвращено на уровне формы с помощью form.is_valid () и т. Д.

Функциональность моделей должна заключаться в предоставлении метаинформации о самом объекте помимо выполнения CRUD. В идеале не следует беспокоиться о данных, которые он получает для операций CRUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...