Вопрос дизайна Django: обработка разных типов форм между клиентом и сервером - PullRequest
0 голосов
/ 17 марта 2011

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

У меня есть две модели, HCameraImage и MCameraImage, которые наследуются от модели Image. На сайте пользователь может заполнить формы HTML, которые заполняют любую из этих двух моделей. Другими словами, я использую HCameraImageForm (request.POST) для заполнения модели. Когда я отправляю его клиентской стороне, мне приходится вручную отслеживать, какой тип формы отправляется в Django, добавляя тип изображения к данным POST:

if request.POST['imagetype'] == "HCameraImage":
    form = HCameraImageForm(request.POST)
    form.save()
if request.POST['imagetype'] == "MCameraImage":
    form = MCameraImageForm(request.POST)
    form.save()        
...etc

Есть ли более элегантный способ справиться с этим? В идеале я хочу иметь родительский базовый класс Image, который позволяет мне:

i = Image()
i.loadFormData(request.POST)

, где loadFormData вызывает правильную производную функцию.

1 Ответ

0 голосов
/ 17 марта 2011

Вы можете создать строку для создания экземпляра правильного объекта формы. Примерно так должно работать:

import myapp.models

form_class = request.POST['imagetype'] + 'Form'
form_class = getattr(myapp.models, form_class)
form = form_class(request.POST)
form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...