'How do I update the records stored in my db using an html form as input?
I am very new to django and I have made an app that displays a different timetable for different user. I am stuck at this point where I can delete the records stored in my db but I am unable to update them through my html form. Is there a way to do this?
Here are my files,
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 %}
Any help would be appreciated. Thanks in advance :)
Solution 1:[1]
@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')
if u need to include update function create similar fuction to update it also
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dharman |
