2014-09-23 4 views
0

Это открытый вопрос. Я пытаюсь написать HTML-страницы для определения/редактирования вопросов (объекты базы данных). A вопрос состоит из небольшого текста и типа: тип указывает его склонение. Вопросительных склонения, например, слайдер, да-нет, свободного текст или множественного выбора. Для свободные тексты и да-нет уклоны, дополнительная информация не требуется. Но для слайдер и несколько вариантов те, дополнительная информация должна быть введена.Методология Django для форм и подформ

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

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

Что мне не хватает - это опыт веб-разработки ... Лучше всего я могу получить динамические выпадающие меню, адаптированные к выбранному вопросам типа, но я не знаю, как использовать javascript или ajax для теперь, так что нескольких разных представлений/шаблонов будет достаточно.

Что было бы самым простым/лучшим способом достичь этого? Я не прошу кода, а скорее как методологию.

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

ответ

2

Ваша методология кажется мне прекрасной (создание базового представления, класса формы и шаблона, которые будут унаследованы и настроены для каждого склонения), за исключением части модели.

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

Я хотел бы использовать model inheritance следующим образом:

class BaseQuestion(models.Model): 
    """Your base model for all questions""" 
    title = models.CharField(max_length=255) 
    description = models.TextField() 

class YesNoQuestion(BaseQuestion): 
    pass 

class FreeTextQuestion(BaseQuestion): 
    pass 

class MultipleChoicesQuestion(BaseQuestion): 
    # assuming you have a QuestionChoice model to store your available choices 
    choices = models.ManyToManyField(QuestionChoice) 

class SliderQuestion(BaseQuestion): 
    slider_start = models.IntegerField(default=1) 
    slider_end = models.IntegerField(default=10) 

Пожалуйста, обратитесь к Джанго документации для углубленного объяснения о модели-наследования, но есть одна вещь, которую вы должны знать: это будет влиять на производительность, особенно в крупных базах данных. Однако, в вашей ситуации, кажется, путь.

Также обратите внимание, что некоторые приложения django, такие как django-polymorphic, вероятно, помогут вам работать с наложением модели.

Для остальной части процесса, ну, я бы следить за этим процессом:

  • мнение, что ручка базовую форму для вопроса (название и описание полей), плюс additionnal поле со списком все доступные отклонения в вопросе
  • Когда пользователь выбирает тип, вы запускаете запрос ajax, который будет публиковать данные формы. Вид ничего не сохраняет, но вместо этого возвращает другую форму, соответствующую выбранному склонению, и заполняется ранее введенными значениями. Таким образом, вам не нужно сохранять идентификатор, поскольку возвращается новая форма.
  • на почте эта форма должна инициировать другой выделенный объект для склонения, который будет обрабатывать данные и сохранять экземпляр соответствующей модели вопроса в базе данных

 Смежные вопросы

  • Нет связанных вопросов^_^