Django
  • Введение
  • Установка
  • Создание проекта
  • Создание приложения
  • Администрирование
  • Создание страниц
  • Динамические страницы
  • Добавление стилей
  • Шаблоны
  • Вывод одной записи
  • AJAX
  • Взаимодействие с БД
  • Сборка на Python3
  • Формы POST запрос
  • Cookie файлы
  • Работа с пользователями
  • Связь в моделях
  • PostgreSQL + JSON
  • Отключение csrf
Powered by GitBook
On this page
  • Код на HTML странице для отправки запросов
  • Код на Python3 для обработки запросов

Was this helpful?

Связь в моделях

Создадим две модели: город и страна.

Модели будут связаны друг с другом.

Для создания моделей в файле 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))
PreviousРабота с пользователямиNextPostgreSQL + JSON

Last updated 5 years ago

Was this helpful?