ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예제(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

    댓글

Designed by Tistory.