Создадим две модели: город и страна.
Модели будут связаны друг с другом.
Для создания моделей в файле models.py напишем код:
from django.db import models
from django.utils import timezone
class Town(models.Model):
town_name = models.TextField()
country = models.ForeignKey('Country')
def __str__(self):
return self.town_name
class Country(models.Model):
country_name = models.TextField()
def __str__(self):
return self.country_name
Код на HTML странице для отправки запросов
Для добавления страны
<form action = "/add_country/" method = "POST">
{% csrf_token %}
<label>Название страны</label>
<input type = "text" name = "countryName">
<input type = "submit" value = "Добавить страну">
</form>
Для добавления города, находящегося в определённой стране
<form action = "/add_town/" method = "POST">
{% csrf_token %}
<label>Название города</label>
<input type = "text" name = "townName">
<label>Название страны</label>
<input type = "text" name = "countryName">
<input type = "submit" value = "Добавить город">
</form>
Для вывода на экран пар город - страна
<div id = "contentOfPairs"></div>
<script>
let r = new XMLHttpRequest();
r.open("GET", "/print_pairs_town_and_country", true);
r.setRequestHeader("Content-Type","text/plain;charset=UTF-8");
r.send(null);
r.onreadystatechange = function() {
if(r.readyState === 4 && r.status === 200) {
const answer = r.responseText + "";
r = null;
document.getElementById("contentOfPairs").innerHTML = answer;
}
}
</script>
Код на Python3 для обработки запросов
Для работы с моделями их нужно подключить
from .models import Town
from .models import Country
Обработка запроса на добавление страны
def add_country(request):
country_name = str( request.POST['countryName'] )
Country.objects.create(country_name=country_name)
return HttpResponseRedirect("/my_page_with_form/" + "add_country_ok")
Обработка запроса на добавление города
def add_town(request):
town_name = str( request.POST['townName'] )
country_name = str( request.POST['countryName'] )
my_countries = Country.objects.filter(country_name=country_name)
if len(my_countries) == 0:
return HttpResponseRedirect("/my_page_with_form/" + "error_country_not_found")
else:
country = my_countries[0]
Town.objects.create(town_name=town_name, country=country)
return HttpResponseRedirect("/my_page_with_form/" + "add_town_ok")
Обработка запроса на вывод пар город - страна
def print_pairs_town_and_country(request):
answer_string = ""
my_towns = Town.objects.order_by('pk')
for town in my_towns:
answer_string = answer_string + str(town.town_name) + "___" + str(town.country.country_name) + "<br>"
return HttpResponse(str(answer_string))