0

Python 3.6.3, Django 1.11.8, Chrome Version 63.0.3239.108 (Official Bauen) (64-Bit)Django Form verwendet mehrere Male in einzelnen HTML und vermeiden doppelte ID

Ich habe ein Projekt erstellen. Das ist mehrere Modale in HTML-Code hinzugefügt.

Ich verwendete Präfix-Attribut in der Formularklasse, mit dieser kann doppelte ID aus anderen Feldern gleichen Namens vermeiden.

Aber wie mit demselben Namen multiple ID zu behandeln, die von einem Formular mehrere Male in Einzel-HTML erstellt wurde?

form.py

class CreateProjectForm(forms.ModelForm): 
    prefix = 'create_project' 
    class Meta: 
     model = Project 
     fields = ['project_name', 'project_type', 'description'] 
     widgets = {'description': forms.TextInput(attrs={'placeholder': 'description'})} 

Meine Form ist gut funktioniert. aber ich bin halten diesen Fehler in Chrome-Entwicklerkonsole:

[DOM] Found 2 elements with non-unique id #id_create_project-description: <input type=​"text" name=​"create_project-description" placeholder=​"description" maxlength=​"200" id=​"id_create_project-description">​ <input type=​"text" name=​"create_project-description" placeholder=​"description" maxlength=​"200" id=​"id_create_project-description">​ 
(index):1 [DOM] Found 2 elements with non-unique id #id_create_project-project_name: <input type=​"text" name=​"create_project-project_name" maxlength=​"50" required id=​"id_create_project-project_name">​ <input type=​"text" name=​"create_project-project_name" maxlength=​"50" required id=​"id_create_project-project_name">​ 
(index):1 [DOM] Found 2 elements with non-unique id #id_create_project-project_type: <select name=​"create_project-project_type" required id=​"id_create_project-project_type">​…​</select>​ <select name=​"create_project-project_type" required id=​"id_create_project-project_type">​…​</select>​ 

enter image description here

Antwort

1

Sie haben zwei Möglichkeiten:

  1. Erstellen Sie separate Formularinstanzen in Ihrer Ansicht, jedes mit einem anderen prefix:

    f1 = CreateProjectForm(prefix='f1') 
    f2 = CreateProjectForm(prefix='f2') 
    

    Und dann render eac h Formular separat - das Präfix wird sicherstellen, dass sie eindeutige IDs haben.

  2. Wenn Sie aus irgendeinem Grund die gleiche Formularklasse verwenden möchten oder nicht wissen, wie viele Instanzen Sie rendern, können Sie render the form manually und entweder die IDs weglassen oder eine äußere Logik verwenden, um ein Präfix zu bestimmen die IDs.

Verwandte Themen