Веб-интерфейс (перетаскиваемые элементы, запоминание состояния) похож на Wufoo - PullRequest
2 голосов
/ 11 мая 2011

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

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

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

class Form(models.Model):
  """...objects..."""


class TextField(models.Model):
  """...objects..."""
  #FK to Form()


class TitleArea(models.Model):
  """...objects..."""
  #FK to Form()

У меня также могут быть определенные идентификаторы для элементов в форме HTML:

<input id="Field2" name="Field2" type="text"/>

Как они (Wufoo) делают это? Моя модель неверна? Я знаю, что это наивно. Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

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

form = YourForm(instance=model_instance)
1 голос
/ 11 мая 2011

Что ж, хорошее место для начала - подумать над вариантом использования.Если я пользователь, что мне понадобится для создания формы?Текстовые поля, конечно, но что еще?Форма будет иметь заголовок?URL?Дата истечения срока действия?

Когда у вас есть такая информация, вы можете начать строить свои модели в Django.

1 голос
/ 11 мая 2011

скрытые поля ввода для выигрыша.

предположим:

$("#submitForm").click(function() {
    // Check out the state of the union and change the hidden fields accordingly..
    // Something like:
    for (var i = 0; i < $(".orderedElements").length; i++) {
        $("#ordered-" + ((Number) i + 1)).attr('value', $(".orderedElements").eq(i).attr('id'));
    }
});

Если вы поймете мой дрейф.

...