728x90
반응형
import random
- random() : 0 이상 1 미만의 실수 난수 생성
- randrange(a, b, c) : a가 시작점, b가 끝점(포함 x), c는 간격(step). 간격은 필수 아님
- choice() : 하나 골라줌
- shuffle() : 시퀀스 객체를 셔플 시켜줌
lambda, map, reduce, filter
# lambda 매개변수 : 표현식
def multi(x, y):
return x * y
if multi(2, 4) == (lambda x, y: x * y)(2, 4):
print('결과가 똑같아용')
# map(함수, 리스트)
print(list(map(lambda x: x ** 3, range(3)))) # [0, 1, 8] 출력
# reduce(함수, 순회 가능한 데이터[, 초기값]) -> 누적 집계
from functools import reduce
r = reduce(lambda x, y: x + y, range(5))
print(r) # 10 출력
users = [{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'sex': 'M', 'age': 73},
{'mail': 'hintoncynthia@hotmail.com',
'name': 'Madison Martinez', 'sex': 'F', 'age': 29},
{'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'sex': 'M', 'age': 51},
{'mail': 'daniel79@gmail.com',
'name': 'Karen Rodriguez', 'sex': 'F', 'age': 32},
{'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'sex': 'F', 'age': 42}]
sum_age = reduce(lambda acc, cur: acc + cur["age"], users, 0)
print(sum_age)
# filter(함수, 순회 가능한 데이터) -> 원소를 함수에 적용시켜 결과가 참인 값들을 걸러낸다.
f = filter(lambda x : x < 5, range(10))
print(list(f)) # [0, 1, 2, 3, 4] 출력
Django 복습 - 요새 기존에 알던 것도 공식 문서로 다시 공부 중입니당
verbose_name
- verbose_name is a human-readable name for the field.
- If the verbose name isn’t given, Django will automatically create it using the field’s attribute name, converting underscores to spaces.
- This attribute in general changes the field name in admin interface.
- 요약 : 필드 이름을 인간이 읽기 쉽도록 바꿈. 안 쓰면 기본적으로 속성 이름 따라감(공백은 ‘_’로 치환)
related_name → 참고 docs
- 모델이 외래키로 참조’되고’ 있을 때, 해당 모델은 FOO_set을 통해 관련 모델의 필드를 반환하는 Manager에 접근할 수 있다.
- 이때 FOO는 소스가 되는 모델의 소문자 이름이다.
- 또는 FOO_set 대신 related_name으로 따로 이름을 지정해줄 수도 있다.
- 해당 Manager는 QuerySets을 반환한다.
from datetime import date
from django.db import models
class Blog(models.Model) :
name = models.CharField(max_length = 100)
tagline = models.TextField()
def __str__(self) :
return self.name
class Entry(models.Model) :
blog = models.ForeignKey(Blog, on_delete = models.CASCADE)
headline = models.CharField(max_length=255)
b = Blog.objects.get(id=1)
b.entry_set.all() # b와 연관된 모든 Entry 객체를 들고 온다.
- 만약 blog = models.ForeignKey(Blog, on_delete = models.CASCADE, related_name = 'entries')로 설정돼있을 경우 b.entries.all()로 가져올 수 있다.
- Django가 역방향 관계(Backwards relation)를 생성하지 않길 원한다면 related_name을 '+'로 설정하거나 '+ '+'로 끝내면 된다. (아래 예시)
class Entry(models.Model) :
blog = models.ForeignKey(Blog, on_delete = models.CASCADE, related_name = "+", )
# Blog 모델이 역방향 관계를 갖지 않도록 한다.
- QuerySet의 kwarg로도 활용할 수 있다. 즉 reverse filter name으로 쓸 수 있다.
related_query_name
- 타겟 모델의 reverse filter name으로 사용하는 이름
- if set 따로 지정하지 않을 경우 related_name이나 default_relaged_name과 동일하다(→_set). otherwise 모델 이름으로 설정된다/
- related_name처럼 app label과 class interpolation을 지원한다.
related_name과 related_query_name 사용 시 주의할 점 → 참고 docs%3A%0A%20%20%20%20%20%20%20%20pass-,Be%20careful%20with%20related_name%20and%20related_query_name,-%C2%B6)
- 추상 기본 클래스(abstract base classes)의 필드는 매번 속성값(attribute, related_name과 related_query_name 포함)을 똑같이 가지고 각각의 자식 클래스에 포함된다.
- 따라서 외래키나 ManyToManyField를 가진 추상 기본 클래스(abstract base classes)를 상속받을 경우 항상 related_name 또는 related_query_name 속성값이 동일한 문제가 발생할 수 있다. (migrate할 때 에러가 나버릴지도~)
- 그러므로 외래키나 ManyToManyField에서 related_name 또는 related_query_name 사용하는 경우, 필드의 고유한(unique) reverse name과 query name 필수로 지정해주어야 한다.
- 이때 %(app_label)s과 %(class)s를 활용한다.
- %(class)s : 해당 필드가 사용되는 자식 클래스의 소문자(lower-cased) 이름.
- %(app_label)s : 자식 클래스가 포함돼있는 앱의 소문자(lower-cased) 이름. 이때 각 앱과 앱 내 모델 클래스의 이름이 모두 unique해야 이름이 다르게 나온다.
- 예시
from django.db import models
class Base(models.Model):
m2m = models.ManyToManyField(
OtherModel,
related_name="%(app_label)s_%(class)s_related",
related_query_name="%(app_label)s_%(class)ss",
)
class Meta:
abstract = True
class ChildA(Base):
pass
class ChildB(Base):
pass
- The reverse name of the common.ChildA.m2m field will be common_childa_related and the reverse query name will be common_childas. (누가 내 블로그를 볼까 싶어서 굳이 한글로 해석하진 않았다../)
- The reverse name of the common.ChildB.m2m field will be common_childb_related and the reverse query name will be common_childbs.
- Finally, the reverse name of the rare.ChildB.m2m field will be rare_childb_related and the reverse query name will be rare_childbs.
related_name&related_query_name요약
- related_name은 일대다 관계에서 1인 모델 인스턴스가 관계된 多 모델의 객체를 가져올 때 사용한다.
- related_name은 모델 인스턴스의 속성처럼 활용 가능하고, 따로 related_query_name을 지정하지 않을 경우 QuerySet의 kwarg로도 사용 가능하다.
- 만약 자식 클래스가 존재할 경우 %(app_label)s과 %(class)s를 활용해 고유한(unique) reverse name과 query name을 지정해 주어야 related_name 또는 related_query_name 속성값이 동일한 문제를 방지할 수 있다.
오늘 기분 나쁜 일 있어서 뒤지게 공부만 했더니 스트레스가 좀 풀렸다.
슬픈 감정이든 빡침이든 부정적인 감정이 올라올 때는 일부러 나를 바쁘게 만든다.
이런 점에서 가끔은 짜잘하게 나쁜 일이 있는 것도 나쁘지 않아~~
덕분에 영어 공부랑 일본어 공부도 하고 코딩 공부까지 하루에 다 할 수 있었다.
반응형
'Programming > TIL and WIL' 카테고리의 다른 글
| float(’inf') : float 자료형의 무한대 상수 (0) | 2023.02.18 |
|---|---|
| Linux(리눅스) - 크론탭(Crontab) (0) | 2023.02.17 |
| 인스턴스 메소드/클래스 메소드/스태틱 메소드, 알고리즘: 징검다리, ORM(lazy loading, eager loading, select_related, prefetch_related, n + 1, caching) (0) | 2023.02.16 |
| 230215: 시퀀스 자료형 (0) | 2023.02.16 |
| CORS(Cross-Origin Resource Sharing) (0) | 2023.02.14 |