Django Wagtail динамически создает форму без новой модели

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

Я наткнулся на это, в котором был интересный ответ, но он начинается с отказа от ответственности

Гибкость Python и Django позволяет разработчикам динамически создавать модели для хранения и доступа к данным, используя ORM Django. Но вам нужно быть осторожным, если вы идете по этому пути, особенно если ваши модели будут изменяться во время выполнения. В этой документации будет рассмотрен ряд моментов, которые необходимо учитывать при использовании динамических моделей во время выполнения.

Что наводит меня на мысль, что многое может пойти не так.

Однако, поскольку я использую wagtail, я полагаю, что, вероятно, есть способ использовать StructBlocks & StreamFields для достижения этого.

Любое руководство было бы полезным.

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

  1. Запросите у пользователя, какие поля он хочет ввести и тип поля.
  2. Передайте это в виде словаря некоторой функции, которая будет генерировать HTML-код для формы.
  3. Когда эта форма используется, вместо того, чтобы беспокоиться о хранении полей по отдельности, храните словарь в Models. Есть два способа сделать это здесь
  4. .

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

Wagtail предоставляет модуль form builder для этой цели.

Вернуться на верх