0부터 시작하는 Django 공부 - 모델 활용하여 CRUD 구현

Jaehong Lee·2022년 6월 20일
0
post-thumbnail

1. model form

  • Django에서 제공해주는 기능으로 form 클래스로 form필드를 중복해서 정의할 필요 없어 코드가 간단해진다
  • 상속받아 사용자가 입력한 값이 올바른 값인지 자동으로 검증해줌
  • 1.1 form.py 생성

    • app 하위에 생성
  • 1.2 ModleForm 작성

    • ModelForm : 사용할 model을 명시. 필드를 직접 작성해줘야하는 form과 다르게 modelform은 사용할 model을 작성해주면 자동으로 저장
    • 지정한 model로 부터 field를 읽어들여 form의 field를 세팅
    • meta class : model의 정보를 작성하는 곳으로, 어떤 모델을 기반으로 form을 작성할 것인지 정보를 작성한다. 이는 해당 model에서 정의한 field 정보를 form에 적용할 수 있게 해준다
  • 1.3 view에 form을 사용자에게 전달

    • form 객체를 생성하여 사용자에게 전달
    • context에 form을 담아 html 파일에 입력 양식을 전달
  • 1.4 html 수정

  • 1.5 실행 페이지

    • 자동으로 형식이 맞춰짐
  • 1.6 data 저장

    • 일일이 속성마다 명시해 줄 필요없이, form에게 전달하면 해당 form field에 맞게 바인딩되어 DB에 저장할 modle객체를 만들어 저장
    • 사용자 입력 정보인 request.POST를 매개변수로 넣어 form data를 통해 form instance를 만든다.
    • 이 form instance에 바로 DATA를 넣어주면 안되고, save를 통해 model 객체를 생성해 넣어줘야한다
    • is_vaild : 유효성 검증을 실행해주며, 결과를 boolean으로 변환하여 반환한다
  • 1.7 modelform의 기능

    • save() : form에 바인딩 된 DATA에서 DB 객체를 만들어 저장하는 메소드로 매개변수로 instance, commit이 있다.
    • 저장과정 : form data가 form instance에 저장되고, 그 다음에 form data가 model instance에 저장된다
    • model과 form은 연관되있으며, model에 form 안에 저장된 model data를 반환하는 것으로, python 코드적으로는 변수에 model 객체를 저장하는 거다
      1. commit = false : 중복 DB 저장을 방지해 저장을 미루어 DATA를 저장하지 않고, model 객체를 반환해준다. 즉, DB에 저장하기 전에 특정 행위를 하고자 할 때 사용한다
      2. instance = model : model 객체를 넣어 수정할 대상을 지정해준다. save()를 하면 새 객체가 생성되는데 instance 값을 넣어주면, 새 객체가 아닌 기존 객체가 수정된다

2. GET & POST 합치기

  • 조건문을 통해 request method에 따라 실행하는 동작을 다르게 하여 함수를 하나로 합친다. 따라서 get과 post를 따로 url과 함수를 사용할 필요 없이 하나의 url과 함수로 동작이 가능하다

  • action을 명시 안하면 default값으로 동일한 url로 접속하게 한다

    • 조회 : order_by로 순서대로 정렬가능

3. url으로 id 주기

  • 3.1 a tag를 사용해 링크 수정

    • 링크에 원하는 링크/원하는 data의 id를 주어 title을 누르면 해당 내용이 출력되게 한다
  • 3.2 url세팅에 int형 정수를 준다고 세팅

  • 3.3 해당 함수에서 id값을 매개변수로 불러와 filter로 해당 data를 받아온다

  • 3.4 html 출력 코드

    • 결과
  • 3.5 q객체

    • objects의 메소드에 복잡한 조건을 넣을때 사용하는 객체
    • 사용예시

4. 게시글 삭제

  • 4.1 코드 추가 : 삭제 후 redirect를 통해 list로 돌아가게 설정

  • 4.2 url 설정

  • 4.3 redirect를 이용해 게시물 작성시 해당 게시물로 바로 이동하게 설정

5. 게시글 수정

  • 먼저 조회가 가능해야되기에 post 불러옴
  • get 방식의 경우 instance를 통해 불러온 post의 내용을 출력하고, 수정을 getdata와 동일하므로 동일한 template을 출력하여 사용자가 내용 입력하게 해줌
  • 저장의 경우 원래 data를 수정해야하므로 post의 제목과 내용을 cleaned_data를 통해 원하는 data를 추출하여 저장하고 save, 출력 페이지는 readget 페이지 사용
  • cleaded_data : is_vaild()를 통해 검증에 통과된 값은 cleand_data 변수명으로 제공된다
  • 이런 방식도 가능
  • form을 불러올때 instance에 불러온 객체를 넣어 조회를 하게 해주어, 새 form을 생성하는 것이 아닌, 이미 존재하는 Data를 수정 가능하게 한다
profile
멋진 엔지니어가 될 때까지

0개의 댓글

관련 채용 정보