как добавить выпадающий список в форму в django?

#ajax #django #database #forms #dropdown

#ajax #django #База данных #формы #выпадающий

Вопрос:

у меня есть форма, которая позволяет пользователю вставлять новую запись в базу данных с помощью django.

форма работает так, как должна.

и у меня есть выпадающий список country, который предварительно заполнен данными из базы данных, и он работает так, как должен.

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

как я могу это сделать?

models.py

 class Country(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return str(self.name)


    class Person(models.Model):
        boolChoice = (
            ("M","Male"),("F","Female")
            )

        name = models.CharField(max_length=50)
        date = models.DateField()
        description = models.TextField()
        gender = models.CharField(max_length = 1,choices=boolChoice)
        country = models.ForeignKey("Country", on_delete = models.CASCADE)
  

addPerson.html

 {% extends 'base.html' %}

{% block content %}

<div class="hero__content">
   <form method="POST" class="form-style-9">{% csrf_token %}
        {{ form.as_p }}


<ul>

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<li>
    {# <input type="number" name="field1" class="field-style field-split align-right" placeholder="اﻟﺴﻨﺔ" id="year"/> #}
    {# <input type="date" name="field2" class="field-style field-split align-left" placeholder="اﻟﺘﺎﺭﻳﺦ" id="date" /> #}
    <h2>Add Member</h2>

</li>

<li>
    <input type="text" name="name" class="field-style field-split align-right" placeholder= "enter ur name " id="name"/>
</li>
<li>
    <input type="date" name="date" class="field-style field-full align-none" placeholder= " your birthdate" id="birthdate" />

</li>
<li>
    <input type="radio" name="gender"  value="M"> Male<br>
    <input type="radio" name="gender"  value="F"> Female<br>

</li>

<li>
<textarea name="description" class="field-style" placeholder= "introduce yourself " id="description"></textarea>
</li>

<li>
<input type="submit" class="field-style field-full align-none" id="save" value="ADD" />
    <script type="text/javascript">
                 $(function(){
                    $('#save').on('click',function(e){
                        e.preventDefault()
                        name=$('#name').val()
                        birthdate=$('#birthdate').val()
                        description=$('#description').val()
                        radioValue = $("input[name = 'gender']:checked").val()
                        if (radioValue){
                            alert("radioValue =", radioValue)
                        }


     $.ajax({
      url:'/addperson/',
      method:'POST',
      data: {

                na:name,
                bi:birthdate,
                de:description,
                ra:radioValue,
          },
      headers:{
       'X-CSRFToken':'{{csrf_token}}'
      }
     }).done(function(msg) {
                        document.location = "/addPerson.html"     
                        alert('ﻟﻘﺪ ﺗﻢّ ﺣﻔﻆ اﻟﻤﻌﻠﻮﻣﺎﺕ')


     }).fail(function(err){
      alert('ﻟﻢ ﻳﺘﻢ اﻟﺤﻔﻆ')
     })
    })

})
</script>
</li>
    </ul>
</form>

  </div>


{% endblock %}
  

views.py

 def addPerson(request):
    print("request method = " , request.method)
    countries = Country.objects.all()
    print (countries)
    if request.method == "POST":
        name = request.POST['na']
        birthdate = request.POST['bi']
        description=request.POST['de']
        gender=request.POST['ra']

        person=Person.objects.create(
            name=name,
            date=birthdate,
            description=description,
            gender = gender,
        )
        print("name  = ", name   "birthdate = " , birthdate   "dec = ", description   "gender = " , gender)
        person.save()
        return render(request,'./addPerson.html',{'countries': countries})
    else:
        print("this is a get METHOD")
  

Комментарии:

1. вы говорите, что «страна выпадающего списка работает так, как должна», и все же вы спрашиваете, как добавить выпадающий список в форму? Я не понимаю.

2. Я вижу, что вы возвращаете список с ответом, хорошо. Вам нужно использовать метод; render_to_response(‘template/path’, {‘countries’: страны,}). Затем вы можете получить доступ к ‘countries’ в этом шаблоне и использовать template for loop для отображения HTML.

Ответ №1:

Я вижу, что вы возвращаете список с ответом, хорошо. Вам нужно использовать метод; render_to_response(‘template/path’, {‘countries’: страны,}). Затем вы можете получить доступ к ‘countries’ в этом шаблоне и использовать template for loop для отображения HTML

 return render_to_response(templates/path.html', {'countries': countries })


<h1>All available countries</h1>
<ul>
  {% for country in countries %}
    <li>{{ country.name}}</li>
  {% endfor %}
</ul>