#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>