Как из 4-х таблиц сохронять данные в 5-ю Django
У меня есть 5 таблиц они связаны
class Name(models.Model):
name = models.TextField()
class Year(models.Model):
year = models.DateField()
class Author(models.Model):
author = models.TextField()
class Genre(models.Model):
genre = models.TextField()
class Main(models.Model):
name = models.ForeignKey(Name, on_delete = models.CASCADE, null=False)
year = models.ForeignKey(Year, on_delete = models.CASCADE)
author = models.ForeignKey(Author, on_delete = models.CASCADE)
genre = models.ForeignKey(Genre, on_delete = models.CASCADE)
Через Views.py я создал функции с помощью которых могу добавлять записи в 4 таблицы
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.http import HttpResponseNotFound
from .models import Genre, Name, Author, Year, Main
# получение данных из бд
def index(request):
name = Name.objects.all()
genre = Genre.objects.all()
author = Author.objects.all()
year = Year.objects.all()
main = Main.objects.all()
return render(request, "index.html", {"genre": genre, 'name': name, "author":author, "year": year, "main":main})
def name(request):
if request.method == "POST":
name = Name()
name.name = request.POST.get("name")
name.save()
return HttpResponseRedirect("/")
# изменение данных в бд
def edit(request, id):
try:
person = Name.objects.get(id=id)
if request.method == "POST":
person.name = request.POST.get("name")
person.save()
return HttpResponseRedirect("/")
else:
return render(request, "edit.html", {"person": person})
except Name.DoesNotExist:
return HttpResponseNotFound("<h2>Name not found</h2>")
def delete(request, id):
try:
name = Name.objects.get(id=id)
name.delete()
return HttpResponseRedirect("/")
except Name.DoesNotExist:
return HttpResponseNotFound("<h2>Person not found</h2>")
def genre(request):
if request.method == 'POST':
genre = Genre()
genre.genre = request.POST.get("genre")
genre.save()
return HttpResponseRedirect("/")
def edit2(request, id):
try:
genre = Genre.objects.get(id=id)
if request.method == "POST":
genre.genre = request.POST.get("genre")
genre.save()
return HttpResponseRedirect("/")
else:
return render(request, "edit2.html", {"genre": genre})
except Genre.DoesNotExist:
return HttpResponseNotFound("<h2>Genre not found</h2>")
def deletegenre(request, id):
try:
genre = Genre.objects.get(id=id)
genre.delete()
return HttpResponseRedirect("/")
except Genre.DoesNotExist:
return HttpResponseNotFound("<h2>Genre not found</h2>")
def author(request):
if request.method == 'POST':
author = Author()
author.author = request.POST.get("author")
author.save()
return HttpResponseRedirect("/")
def edit3(request, id):
try:
author = Author.objects.get(id=id)
if request.method == "POST":
author.author = request.POST.get("author")
author.save()
return HttpResponseRedirect("/")
else:
return render(request, "edit3.html", {"author": author})
except Author.DoesNotExist:
return HttpResponseNotFound("<h2>Autor not found</h2>")
def deleteauthor(request, id):
try:
author = Author.objects.get(id=id)
author.delete()
return HttpResponseRedirect("/")
except Author.DoesNotExist:
return HttpResponseNotFound("<h2>Genre not found</h2>")
def year(request):
if request.method == 'POST':
year = Year()
year.year = request.POST.get("year")
year.save()
return HttpResponseRedirect("/")
def edit4(request, id):
try:
year = Year.objects.get(id=id)
if request.method == "POST":
year.year = request.POST.get("year")
year.save()
return HttpResponseRedirect("/")
else:
return render(request, "edit4.html", {"year": year})
except Year.DoesNotExist:
return HttpResponseNotFound("<h2>Year not found</h2>")
def deleteyear(request, id):
try:
year = Year.objects.get(id=id)
year.delete()
return HttpResponseRedirect("/")
except Year.DoesNotExist:
return HttpResponseNotFound("<h2>Genre not found</h2>")
@import url('https://fonts.googleapis.com/css2?family=Mohave:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap');
body{
font-family: 'Mohave', sans-serif;
}
.container{
display:flex;
background-color: #DCDCDC;
}
.name{
display: flex;
margin-right: 50px;
border: 2px double black;
padding: 10px;
border-radius: 10px;
}
.author{
display: flex;
margin-right: 50px;
border: 2px double black;
padding: 10px;
border-radius: 10px;
}
.genre{
display: flex;
margin-right: 50px;
border: 2px double black;
padding: 10px;
border-radius: 10px;
}
.year{
display: flex;
margin-right: 50px;
border: 2px double black;
padding: 10px;
border-radius: 10px;
}
.main{
display: flex;
margin-right: 50px;
border: 2px double black;
padding: 10px;
border-radius: 10px;
}
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Библиотека</title>
<link rel="stylesheet" href="{% static "/styles.css" %}" />
</head>
<body class="container">
<div class="name">
<form method="POST" action="name/">
{% csrf_token %}
<p>
<label>Введите Название книги</label><br>
<input type="text" name="name" required=False/>
</p>
<input type="submit" value="Сохранить">
{% if name.count > 0 %}
<h2>Список Книг</h2>
<table>
<thead>
<th>Id</th>
<th>Имя</th>
<th></th>
</thead>
{% for name in name %}
<tr>
<td>{{ name.id }}</td>
<td>{{ name.name }}</td>
<td><a href="edit/{{name.id}}">Изменить</a> | <a href="delete/{{name.id}}">Удалить</a>
</td>
</tr>
{% endfor %}
</table>
{% endif %}
</form>
</div>
<div class="genre">
<form method="POST" action="genre/">
{% csrf_token %}
<p>
<label>Введите Жанр книги</label><br>
<input type="text" name="genre" required=False />
</p>
<input type="submit" value="Сохранить">
{% if genre.count > 0 %}
<h2>Жанр книги</h2>
<table>
<thead>
<th>Id</th>
<th>Жанр</th>
<th></th>
</thead>
{% for genre in genre %}
<tr>
<td>{{ genre.id }}</td>
<td>{{ genre.genre}}</td>
<td><a href="edit2/{{genre.id}}">Изменить</a> | <a href="deletegenre/{{genre.id}}">Удалить</a>
</td>
</tr>
{% endfor %}
</table>
{% endif %}
</form>
</div>
<div class="author">
<form method="POST" action="author/">
{% csrf_token %}
<p>
<label>Введите Автора книги</label><br>
<input type="text" name="author" required=False />
</p>
<input type="submit" value="Сохранить">
{% if author.count > 0 %}
<h2>Автор книги</h2>
<table>
<thead>
<th>Id</th>
<th>Автор</th>
<th></th>
</thead>
{% for author in author %}
<tr>
<td>{{ author.id }}</td>
<td>{{ author.author}}</td>
<td><a href="edit3/{{author.id}}">Изменить</a> | <a href="deleteauthor/{{author.id}}">Удалить</a>
</td>
</tr>
{% endfor %}
</table>
{% endif %}
</form>
</div>
<div class="year">
<form method="POST" action="year/">
{% csrf_token %}
<p>
<label>Введите Год издания</label><br>
<input type="date" name="year" required=False />
</p>
<input type="submit" value="Сохранить">
{% if year.count > 0 %}
<h2>Год издания</h2>
<table>
<thead>
<th>Id</th>
<th>Год</th>
<th></th>
</thead>
{% for year in year %}
<tr>
<td>{{ year.id }}</td>
<td>{{ year.year }}</td>
<td><a href="edit4/{{year.id}}">Изменить</a> | <a href="deleteyear/{{year.id}}">Удалить</a></td>
</tr>
{% endfor %}
</table>
{% endif %}
</form>
</div>
<div class="main">
<form method="POST" action="main/">
{% csrf_token %}
<h2>Главная таблица</h2>
<table>
<thead>
<th>Id</th>
<th>Название</th>
<th>Жанр</th>
<th>Автор</th>
<th>Год</th>
</thead>
</table>
</form>
</div>
</body>
</html>
Вопрос каким образом можно реализовать заполнение 5-й таблицы беря записи из 4-х