2021.04.27

최대환·2021년 4월 27일
0

TIL

목록 보기
10/55

공부시간

  • 9시간 7분

코드카타2번

🥠문제

reverse 함수에 정수인 숫자를 인자로 받습니다.
그 숫자를 뒤집어서 return해주세요.
x: 숫자
return: 뒤집어진 숫자를 반환!
예들 들어,
number: 1234
return: 4321

number: 1234
return: 4321

number: -1234
return: -4321

number: -1234
return: -4321

number: 1230
return: 321

🍗 풀이

def reverse(number):
  # number가 양수일 때
  if number > 0:
    number_str = str(number)
    return int(number_str[::-1])

  # number가 0일 때
  if number == 0:
    return 0

  # number가 음수일 때
  if number < 0:
    number_str = str(abs(number))
    return int(number_str[::-1]) * -1

🧐 정리

  • 리스트 슬라이싱 step기능

    list_name[start: stop: step]

    • step 값을 따로 선언하지 않으면 default 1로 지정
    • step값만큼 건너뛰어 값을 가져올 수 있음
  • 절댓값을 구하는 함수
    • abs()를 사용하면 넣은값의 절댓값을 리턴

용어정리

필드 (field) : 클래스에 내장된 변수
메쏘드 (method) : 클래스에 속하는 함수


ManyToManyField

  • ManyToManyField를 쓰는 이유

    many to many로 연결할 때, 그냥 ForeignKey를 사용해서 연결을 하면 데이터를 저장할때도 중간테이블을 거쳐서 하여 직관적이지 않고, 나중에 데이터에서 불러올때도 쿼리를 2번이나 거쳐야 한다.(쿼리란 데이터베이스에 정보를 요청하는 것을 말한다.)
    되도록이면 many to many관계에서는 ManyToManyField를 쓰도록하자

  • ManyToManyField 사용법

models.py

class Product(models.Model):
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
    nutrition = models.ForeignKey('Nutrition', on_delete=models.CASCADE)
    allergy = models.ManyToManyField('Allergy', through = 'AllergyProduct')
    korean_name = models.CharField(max_length=45)
    english_name = models.CharField(max_length=45, null=True)
    description = models.TextField(null=True)

    def __str__(self):
        return self.korean_name

    class Meta():
        db_table = 'product'

class Allergy(models.Model):
    name = models.CharField(max_length = 45)

    def __str__(self):
        return self.name

    class Meta():
        db_table = 'allergy'


class AllergyProduct(models.Model):
    product = models.ForeignKey('Product', on_delete = models.CASCADE)
    allergy = models.ForeignKey('Allergy', on_delete = models.CASCADE, blank=True)
    
    class Meta():
        db_table = 'allergy_product'
  • product테이블과 allergy테이블을 many to many 관계로 연결해 줬다.
  • ManyToManyField는 product테이블이나 allergy 테이블에 만들어 주면 된다.
  • product테이블이 이 앱에서 가장 중심이 되는 테이블이기 때문에, ManyToManyField를 product테이블에 사용하는것이 나중에 사용할 때 편리하다.
  • through인자를 통해 중간테이블이 뭔지 데이터베이스에 알려줘야한다.(필수)
  • many to many 관계에서 객체에 값을 추가하는 법
# product테이블(ManyToManyField가 있는곳)에서 객체에 allergy를 추가할 때
p1 = Product.objects.get(id = 3)
p1.allergy.add(Allergy.objects.get(name = '토마토'))
# allergy테이블(ManyToManyField가 없는곳)에서 객체에 product을 추가할 때
a1 = Allergy.objects.get(name = 우유)
p1.product_set.add(Product.objects.get(name = '바닐라 라떼'))

깃허브 용어

  • git reset
 git reset --hard 1234 
 # 1234 대신 돌아가고 싶은 커밋 아이디 앞 4자리수를 쓰면된다.
  • rseet --hard를 사용하면 다시는 돌아올 수 없으니 주의해서 사용해야된다.
profile
나의 개발지식 output 공간

0개의 댓글