Гемант Вішваркарма

Зосереджено на веб-розробці, ReactJS, Angular, JavaScript, PHP, дизайні баз даних, Ionic, Jquery та MySQL

vishwakarma

  • Додому
  • Android
  • IOS
  • NodeJS
  • PHP
  • Python
  • Зв'яжіться з нами

Вівторок, 26 листопада 2019 р

Django ModelForm - Чи є спосіб динамічно визначати поля? (Наприклад, при використанні django-translation-fields)

У мене є ModelForm з Django 2.1, і я переніс кілька полів на іншу модель. Виклик make_migrations спричиняє помилку, оскільки ці поля не існують у поточній моделі. Я додав деякі поля у форму, але одне з полів є TranslatedField, і тому в даний час існує 2 поля, і в майбутньому їх може бути більше, залежно від кількості мов. Ім'я поля - місто, і в даний час я отримую повідомлення про помилку "Невідомі поля (міста), вказані для SiteProfile" (оскільки я використовую 2 мови - "en" та "he") - але я хочете створити всі поля динамічно за допомогою циклу for над мовами, які ми використовуємо в проекті. Чи можу я замінити (і чи це хороший метод програмування) метод __new__, чи є інший спосіб? Я вважаю за краще не кодувати конкретні назви полів (city_en та city_he), оскільки вони можуть змінитися в майбутньому, залежно від того, скільки мов ми використовуємо.

Ви можете бачити мій поточний коміт (не працює) на GitHub.

І поточний код цієї гілки.

Я хотів би знати, який найкращий метод програмування визначає динамічний список полів (які всі ідентичні, і буде використано лише одне з них, інші видаляються методом __init__) у ModelForm, де поля зберігаються в іншій моделі (є 2 моделі, але лише одна форма).

Я все ще не фіксував міграції через цю помилку під час запуску make_migrations.

(Я визначив команду make_migrations, яка виконує лише макеміграції)

Форма (з моєю спробою перевизначити __new__):

Оновлення: Я думаю про визначення цих полів у методі __init__, одночасно видаляючи їх із полів у класі Meta, але чи хороший підхід? Визначити поля, яких немає у списку полів ?

Django застерігає від прямого визначення полів.

Настійно рекомендується явно встановити всі поля, які слід редагувати у формі, використовуючи атрибут fields. Якщо цього не зробити, це може легко призвести до проблем із безпекою, коли форма несподівано дозволяє користувачеві встановити певні поля, особливо коли нові моделі додаються до моделі. Залежно від того, як відображається форма, проблема може бути навіть не видно на веб-сторінці.

Альтернативним підходом було б включити всі поля автоматично або до чорного списку включити лише деякі. Відомо, що цей фундаментальний підхід набагато менш безпечний і призвів до серйозних експлуатування на великих веб-сайтах (наприклад, GitHub).

Я хочу знати, чи є рішення без жорсткого кодування мов. В даний час я жорстко кодую мови: