시범운영 요청사항인 출석부 Update 구현 과정을 기록.
구현 과정을 정리하면서 개발자 스스로 과정에 대한 평가를 하기 위함.

# views.py
def chk(request):
if request.method == "POST":
checked_name = request.POST["name"]
checked_date = request.POST["date"]
if Attendance.objects.filter(name=checked_name, date=checked_date).exists():
noti = Attendance.objects.filter(name=checked_name, date=checked_date)
poko_image = GetImage.objects.get(pk=3).image.url
attendance_noti_text = (
f"{checked_name} 학생은 {noti[0].attendance}으로 확인이 완료 되었습니다!"
)
return render(
request,
"checking/attendance_noti.html",
{
"attendance_noti_text": attendance_noti_text,
"checked_name": checked_name,
"checked_date": checked_date,
"poko_image": poko_image,
},
)
if Attendance.objects.filter(name=checked_name, date=checked_date).exists():

{% if checked_name and checked_date %}
<form action="/check_modi/" method="get">
{% csrf_token %}
<input type="hidden" name="name" value="{{ checked_name }}">
<input type="hidden" name="date" value="{{ checked_date }}">
<input type="submit" value="수정" class="btn btn-primary">
</form>
{% endif %}
# views.py
def check_modi(request):
if request.method == "GET":
checked_name = request.GET["name"]
checked_date = request.GET["date"]
print(checked_name, checked_date)
modi = Attendance.objects.filter(name=checked_name, date=checked_date)
modi_name = modi[0].name
modi_date = modi[0].date
modi_attendance = modi[0].attendance
poko_image = GetImage.objects.get(pk=3).image.url
return render(
request,
"checking/attendance_noti.html",
context={
"modi_name": modi_name,
"modi_attendance": modi_attendance,
"modi_date": modi_date,
"poko_image": poko_image,
},
)
template에서 전달받은 checked_name과 checked_date를 통해
def check_modi에서 Attendance model에서 학생의 현재 데이터를 가져온다.
조회한 학생의 이름, 출석부 날짜, 출석상태는 다시 변수로 지정.
template은 전달 받은 데이터를 아래 코드를 통해 화면에 출력한다.
{% if modi_attendance and modi_name %}
<form action="/check_modi/" method="post">
{% csrf_token %}
<p><input type="text" name="modi_date" value="{{ modi_date }}"></p>
<p><input type="text" name="modi_name" placeholder={{ modi_name }} value={{ modi_name }}></p>
<p><input type="text" name="modi_attendance"
placeholder={{ modi_attendance }} value={{ modi_attendance }}></p>
<p><input type="submit" class="btn btn-primary"></p>
</form>
{% endif %}

# views.py
def check_modi(request):
if request.method == "POST":
modied_name = request.POST["modi_name"]
modied_date = request.POST["modi_date"]
modied_attendance = request.POST["modi_attendance"]
modied = Attendance.objects.filter(name=modied_name, date=modied_date)
if modied.exists(): # 해당하는 객체가 존재하는 경우
modied_instance = modied.first() # 필터링된 첫 번째 객체를 가져옵니다.
modied_instance.attendance = modied_attendance # attendance 값을 변경합니다.
modied_instance.save() # 변경 사항을 저장합니다.
# print("변경 된 attendance", modied[0].attendance)
modied_attendance = modied[0].attendance # 변경된 attendance 재선언
# referer = request.META.get("HTTP_REFERER")
attendance_modied_text = (
f"{modied_name} 학생은 {modied_attendance}으로 수정이 완료 되었습니다!"
)
template에서 post로 전달 받은 modi_name, modi_date, modi_attendance를 변수 지정
Attendance Model의 내용 변경
modied = Attendance.objects.filter(name=modied_name, date=modied_date) # 필터링 된 모델 데이터 가져오기
if modied.exists(): # 해당하는 객체가 존재하는 경우
modied_instance = modied.first() # 필터링된 첫 번째 객체를 가져옵니다.
modied_instance.attendance = modied_attendance # attendance 값을 변경합니다.
modied_instance.save() # 변경 사항을 저장합니다.
modied_attendance = modied[0].attendance # 변경된 attendance로 변수 재선언
{% if attendance_modied_text %}
<div class="quote-box">
<h4>알림</h4>
<p>
{{ attendance_modied_text }}
</p>
</div>
{% endif %}

