Как обновить записи, хранящиеся в моей базе данных, используя html-форму в качестве ввода?
Я очень новичок в django и я сделал приложение, которое отображает разное расписание для разных пользователей. Я застрял на моменте, когда я могу удалить записи, хранящиеся в моей базе данных, но я не могу обновить их через мою html форму. Есть ли способ сделать это?
Вот мои файлы,
models.py
from pickle import TRUE
from django.db import models
from datetime import date
from django.conf import settings
class Timetable(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default = "", on_delete=models.CASCADE)
subject = models.CharField(max_length=100)
room_no= models.IntegerField()
date = models.DateField(default=date.today)
time = models.TimeField()
semester = models.TextField()
day = models.CharField(max_length=10, default="")
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
from django.contrib.auth.decorators import login_required
from .models import Timetable
# Create your views here.
def register(request):
if request.method=='POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created, you are now able to login!')
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
@login_required
def tt(request):
if request.user.is_authenticated:
tt = Timetable.objects.filter(user=request.user).order_by('day')
return render(request, 'users/time_table.html', {'tt': tt})
else:
return render(request, 'homepage/home.html')
@login_required
def tt_add(request):
return render(request, 'users/tt_add.html')
@login_required
def newPage(request):
user=request.user
sem = request.POST.get("semester")
sub = request.POST.get("subject")
room_no = request.POST.get("room")
date = request.POST.get("date")
time = request.POST.get("time")
day = request.POST.get("day")
o_ref = Timetable(user=user,semester=sem, subject=sub, room_no=room_no, date=date, time=time, day=day)
o_ref.save()
messages.success(request, f'Timetable edited successfully!')
return redirect('time_table')
@login_required
def delete_tt(request, tt_id):
tt= Timetable.objects.get(pk=tt_id)
tt.delete()
return redirect('time_table')
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Timetable
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
template.html
{% extends "homepage/base.html" %}
{% block content %}
<h2>{{ user.username }}'s Time table.</h2>
<table class="table">
<th>Subject</th>
<th>Semester</th>
<th>Time</th>
<th>Date</th>
<th>Day</th>
<th> </th>
{% for tt in tt %}
<tr>
<td>{{ tt.subject }}</td>
<td>{{ tt.semester }}</td>
<td>{{ tt.time }}</td>
<td>{{ tt.date }}</td>
<td>{{ tt.day }}</td>
<td><a href="{% url 'delete_tt' tt.id %}" class="btn btn-outline-danger">Delete</a>
</td>
</tr>
{% endfor %}
</table>
<br>
<br>
<a class="btn btn-primary" href="{% url 'time_table_add' %}" role="button">Add record to timetable</a>
{% endblock content %}
create.html
{% extends "homepage/base.html" %}
{% block content %}
<h2>Editing Timetable...</h2>
<form action="/new/" method="post">
{% csrf_token %}
<table border="3px solid black" class="table">
<th>
Semester: <input type="text" place="Which semester?" name="semester">
</th>
</tr>
<tr>
<th>
Subject: <input type="text" placeholder="Subject to be taught" name="subject">
</th>
</tr>
<tr>
<th>
Room Number: <input type="text" placeholder="Room Number" name="room">
</th>
</tr>
<tr>
<th>
Date: <input type="date" name="date">
</th>
</tr>
<tr>
<th>
Time: <input type="time" name="time">
</th>
</tr>
<tr>
<th>
Day: <input type="text" name="day">
</th>
</tr>
</table>
<input class="btn btn-primary" type="submit" value="Save">
<input class="btn btn-primary" type="reset" value="Reset">
</form>
<br>
<a class="btn btn-primary" href="{% url 'time_table' %}" role="button">View Timetable</a>
{% endblock content %}
Любая помощь будет оценена по достоинству. Заранее спасибо :)
@login_required
def newPage(request):
if request.method == 'POST': # check post
sem = request.POST.get("semester")
sub = request.POST.get("subject")
room_no = request.POST.get("room")
date = request.POST.get("date")
time = request.POST.get("time")
day = request.POST.get("day")
Timetable.objects.create(user=request.user,semester=sem,
subject=sub, room_no=room_no, date=date, time=time, day=day)
messages.success(request, f'Timetable edited successfully!')
return redirect('time_table')
если вам нужно включить функцию обновления, создайте аналогичную функцию для обновления также