Concentrat pe dezvoltare web, ReactJS, Angular, JavaScript, PHP, proiectare baze de date, Ionic, Jquery și MySQL

modelform

  • Acasă
  • Android
  • IOS
  • NodeJS
  • PHP
  • Piton
  • Contactează-ne

Marți, 26 noiembrie 2019

Django ModelForm - Există o modalitate de a defini câmpurile dinamic? (De exemplu, când utilizați câmpuri traduse django)

Am un ModelForm cu Django 2.1 și am mutat câteva câmpuri într-un alt model. Apelarea make_migrations provoacă o eroare deoarece aceste câmpuri nu există în modelul curent. Am adăugat câteva dintre câmpuri la formular, dar unul dintre câmpuri este TranslatedField și, prin urmare, există în prezent 2 câmpuri, iar în viitor ar putea fi mai multe, în funcție de numărul de limbi. Numele câmpului este oraș și, în prezent, primesc un mesaj de eroare „Câmpuri necunoscute (oraș_ro, oraș_he) specificate pentru SiteProfile” (deoarece folosesc 2 limbi - „en” și „el”) - dar vreau să creez toate câmpurile dinamic cu o buclă for peste limbile pe care le folosim în proiect. Pot suprascrie (și este o metodă bună de programare) metoda __new__ sau există o altă modalitate? Prefer să nu codez numele câmpurilor specifice (city_en și city_he), deoarece acestea se pot schimba în viitor, în funcție de câte limbi folosim.

Puteți vedea confirmarea mea actuală (care nu funcționează) pe GitHub.

Și codul actual al acestei ramuri.

Aș dori să știu care este cea mai bună metodă de programare pentru a defini o listă dinamică de câmpuri (care sunt toate identice și numai unul dintre ele va fi utilizat, celălalt este eliminat în metoda __init__) într-un ModelForm în care câmpurile sunt salvate într-un alt model (există 2 modele, dar o singură formă).

Încă nu am comis migrațiile din cauza acestei erori la executarea make_migrations.

(Am definit o comandă make_migrations care nu face decât migrarea)

Formularul (încercând să anulez __new__):

Actualizați: Mă gândesc să definesc aceste câmpuri în metoda __init__ în timp ce le elimin din câmpurile din clasa Meta, dar este o abordare bună? Pentru a defini câmpurile care nu sunt în lista câmpurilor ?

Django avertizează împotriva definirii câmpurilor nu în mod explicit.

Este recomandat să setați în mod explicit toate câmpurile care ar trebui editate în formular folosind atributul câmpuri. Nerespectarea acestui lucru poate duce cu ușurință la probleme de securitate atunci când un formular permite în mod neașteptat utilizatorului să seteze anumite câmpuri, mai ales atunci când câmpurile noi sunt adăugate la un model. În funcție de modul în care este redat formularul, este posibil ca problema să nu fie chiar vizibilă pe pagina web.

Abordarea alternativă ar fi includerea automată a tuturor câmpurilor sau doar lista neagră a câtorva. Se știe că această abordare fundamentală este mult mai puțin sigură și a condus la exploatări serioase pe site-uri web importante (de exemplu, GitHub).

Vreau să știu dacă există o soluție fără codificarea dură a limbilor. În prezent, am codificat limbile: