-
예제(table 가져와서 join해서 결과 나타내기)Python Django 2022. 10. 23. 15:33
urls.py
from django.contrib import admin from django.urls import path from myapp import views urlpatterns = [ path("admin/", admin.site.urls), path("", views.main), path("show", views.show), ]
Function views 방법을 사용하였다.
models.py
from django.db import models # Create your models here. class Gogek(models.Model): gogek_no = models.IntegerField(primary_key=True) gogek_name = models.CharField(max_length=10) gogek_tel = models.CharField(max_length=20, blank=True, null=True) gogek_jumin = models.CharField(max_length=14, blank=True, null=True) gogek_damsano = models.ForeignKey('Jikwon', models.DO_NOTHING, db_column='gogek_damsano', blank=True, null=True) class Meta: managed = False db_table = 'gogek' class Jikwon(models.Model): jikwon_no = models.IntegerField(primary_key=True) jikwon_name = models.CharField(max_length=10) buser_num = models.CharField(max_length=20) jikwon_jik = models.CharField(max_length=10, blank=True, null=True) jikwon_pay = models.IntegerField(blank=True, null=True) jikwon_ibsail = models.DateField(blank=True, null=True) jikwon_gen = models.CharField(max_length=4, blank=True, null=True) jikwon_rating = models.CharField(max_length=3, blank=True, null=True) class Meta: managed = False db_table = 'jikwon' class Buser(models.Model): buser_no = models.IntegerField(primary_key=True) buser_name = models.CharField(max_length=10) buser_loc = models.CharField(max_length=10, blank=True, null=True) buser_tel = models.CharField(max_length=15, blank=True, null=True) class Meta: managed = False db_table = 'buser'
cmd에서 명령어 입력 후, 파일을 만들어 이미 있는 table을 불러온다. 그리고 그것을 models.py에 붙여놓기 한다.
views.py
from django.shortcuts import render from myapp.models import Gogek, Jikwon, Buser import datetime # Create your views here. def main(request): return render(request, "main.html") def show(request): name = request.POST.get('name') tel = request.POST.get('tel') godata = Gogek.objects.select_related('gogek_damsano').get(gogek_name=name, gogek_tel=tel) joindata = godata.gogek_damsano budata = Buser.objects.get(buser_no=joindata.buser_num) # 여러 결과가 나올 것을 대비해서 filter로 찾아서 list로 반환하여 result.html 페이지에서 for문으로 테이블 출력 할 수 있는게 종결세팅 # 근무 년수 구하기 예 workdays = datetime.date.today() - joindata.jikwon_ibsail workyears = workdays.days // 365 return render(request, "show.html", {'jd':joindata, 'bd':budata, 'workyears':workyears})
show.html 페이지에서 입력한 정보를 가져와야함으로 name과 , tel이라는 변수명에 그것을 담는다.
그리고 그것을 테이블을 호출하면서 join을 실시한다.
부서번호가 buser와 jikwon에도 있기 때문에 그것도 서로 join한다.
각각의 변수명에 담고 그것을 dict 타입으로 페이지로 return 시킨다.
main.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> window.onload=function(){ document.querySelector("#btnResult").onclick=chkFunc; } function chkFunc(){ if(frm.name.value === ""){ alert('작성자를 입력하세요'); frm.name.focus(); return; }else if(frm.tel.value === ""){ alert('전화번호를 입력하세요'); frm.tel.focus(); return; } frm.submit(); } </script> </head> <body> <form action="/show" name="frm" method="post"> {% csrf_token %} <h2>고객 정보 입력</h2> 고객명 : <input type="text" name="name"/> 고객전화 : <input type="text" name="tel"/> <input type="button" value="확인" id="btnResult"> </form> </body> </html>
고객명과 고객전화를 show.html로 post 방식으로 가지고 간다.
post 방식인 경우에는 뒤에 {% csrf_token %}를 잊으면 안 된다.
show.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h3>담당직원</h3> <table style="width:50%" border=1> <tr> <td rowspan="2" style="width:30%;"> {% if jd.jikwon_gen == "남" %} <img style="width:100%;" src="/static/images/man.png"> {% else %} <img style="width:100%;" src="/static/images/woman.png"> {% endif %} </td> <td>직원명:</td><td>{{jd.jikwon_name}}</td><td>직급:</td><td>{{jd.jikwon_jik}}</td></tr> <tr><td>부서명:</td><td>{{bd.buser_name}}</td><td>부서전화:</td><td>{{bd.buser_tel}}</td></tr> <tr><td colspan="2">근무년수:</td><td>{{workyears}}년</td><td>평점:</td> {% if jd.jikwon_rating == "a" %} <td>최우수</td> {% elif jd.jikwon_rating == "b" %} <td>우수</td> {% else %} <td>일반</td> {% endif %} </tr> </table> </body> </html>
main.html에서 가져온 정보를 views.py의 show()함수에서 받아서 정보를 정리한다음 변수명에 담아 넘겼으므로 그 변수명을 사용하여 테이블의 정보를 호출할 수 있다.
'Python Django' 카테고리의 다른 글
Python Ajax 예제(db 연동) (0) 2022.10.23 Python Django 18 - Python Ajax (0) 2022.10.23 게시판 예제 - 댓글 (0) 2022.10.23 게시판 예제 (0) 2022.10.23 Python Django 17 - table이 존재하는 상황(table 가져오기) (0) 2022.10.23