코딩,해볼까

04.07. 장고 개인 프로젝트 ing... 본문

Back/TIL

04.07. 장고 개인 프로젝트 ing...

떠굥 2023. 4. 8. 16:10

0.  오늘 배운 것

1) forms

2) models

3) ModelForm

 

* 과제의 목표

1) 효율적인 DB TABLE 구조 사용

2) forms.py를 만들어 사용해본다.

 

 

 


1.  문제점

forms, models, modelform의 차이점과 쓰임새, 쓰는 방법을 모르겠다.

product의 DB는 정상적으로 만들어졌는데, html과 연결이 어렵다.

forms도 DB 는 연결이 되었는데.. 실제로 로그인하고 회원가입 했을 때의 정보가 왔다갔다 하지 않는다.

 

 

 

 


2. 시행착오

- forms.py 코드

from .models import Product
from django import forms

# form


class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ['code', 'name', 'description', 'price', 'size']

 

- models.py 코드

from django.db import models


class Product(models.Model):
    """
    상품 모델입니다.
    상품 코드, 상품 이름, 상품 설명, 상품 가격, 사이즈 필드를 가집니다.
    """
    codes = (
        ('hood-001', '후드 1'),
        ('hood-002', '후드 2'),
        ('hood-003', '후드 3'),
        ('jean-001', '청바지 1'),
        ('jean-002', '청바지 2'),
        ('jean-003', '청바지 3'),
        ('socks', '양말'),
        ('cap', '모자'),
    )
    code = models.CharField(choices=codes, max_length=10, verbose_name='제품 코드')
    name = models.CharField(max_length=10, verbose_name='제품명')
    description = models.CharField(max_length=50, verbose_name='설명')
    price = models.IntegerField(default=0, verbose_name='가격')
    sizes = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
        ('F', 'Free'),
    )
    size = models.CharField(choices=sizes, max_length=1, verbose_name='사이즈')

    def __str__(self):
        return self.code

    def save(self, *args, **kwargs):
        super(Product, self).save(*args, **kwargs)

# super() 함수의 첫 번째 인자는 부모 클래스의 이름인 Product이어야 하고,
# 이후에 self가 인스턴스를 참조하므로 Product 모델의 인스턴스가 정확하게
# 저장되도록 합니다. 이렇게 하면 부모 클래스인 models.Model의 save()
# 메서드가 올바르게 호출되어, 인스턴스가 데이터베이스에 저장되게 됩니다.

어떻게 적어야할지조차 몰라 계속 삽질하며 오류가 나지 않는 결과를 도출하기까지 오래 걸렸다.

 

 

 


3. 해결방법

오류는 대부분  import가 안되었거나, []가 {}로 들어가거나, 콤마나 따옴표 등이 빠졌거나 하는 간단한 오류들이었다. 

장고는 오류의 위치와 어떤 오류인지 친절하게 알려줘서 하나하나 디버깅해나갔다.

 

 

 


4. 알게된 점

어디에 정확하게 내장되어 있는지, 장고에 어떤 기능이 있는지 자세히 보기 위해서 docs 를 읽고 공부할 것이다.

기술매니저님께 학습 방향에 대한 상담을 많이 하게 되었다.

forms를 사용하는 이유 : DRF, 나아가서 serializer를 수월하게 배우기 위한 과정

앞으로의 과제에서 비슷한 상황이 많이 발생할 것이므로 여기서 안주하지말고 나아가자.

 

 

 

 

 

Comments