중요한 것이다
현재 배우고있는 강의에서 변수이름을 너무 지나치게 통일시키는바람에 뭐가 뭔지 어디서 가져오는지 알수가 없다
어제 이것때문에 굉장히 많은 시간을 버려가며 경로를 찾아다녔는데(함수면 클릭하면 되는데 스트링형태라 경로찾기도 빡셈)
그래서 팀원분이 잘 정리해주셨다
render()
구문에서 {}(중괄호) 안에 들어가는'my_commit'
와 html에서 템플릿 구문으로 쓰이는'my_commit'
은models.py
에있는db_table
이름이 맞는지?
# 예시
# views.py
def detail(request):
if request.method == 'GET':
all_commit = Commit.objects.all().order_by('-created_at')
return render(request, 'main.html', {'my_commit':all_commit})
# models.py
class Commit(models.Model):
class Meta:
db_table = "my_commit"
# main.html
{% for tw in my_commit %}
<div class="col-md-12 mb-2">
<!-- 중간 생략 -->
</div>
{% endfor %}
답 :
db_table
이름이 아니다.
딕셔너리로 맞추기 위해 쓴것 뿐 두 이름만 통일시킨다면 크게 상관이 없다.
commit_comment = Comment.objects.filter(commit_id=id).order_by('-created_at')
에서commit_id
는 데이터베이스 에 있는 걸 가져오는거같은데commit_id
가 아닌commit
으로만 해도 작동이 잘되는데 그 이유가 무엇인지?
# views.py
def detail_commit(request, id):
my_commit = Commit.objects.get(id=id)
commit_comment = Comment.objects.filter(commit_id=id).order_by('-created_at')
답:
commit_id
는 db에 담긴 내용을 가져오는것이 맞다
commit
으로만 해도 작동되는 이유는 예외처리에서 걸리지 않고 운좋게 넘어간 케이스이다. 쿼리셋과 인자를 확실히 구분못하면 무적권 에러가 발생한다
#예시
def detail_commit(request, id):
my_commit = Commit.objects.get(id=id)
commit_comment = Comment.objects.filter(commit_id=id).order_by('-created_at')
함수 안에 있는 인자인 id
는 'id=id'
와 'commit_id=id'
에서 두번째에 해당하고 첫번째 id
는 commit_id
처럼 db
에 있는 쿼리셋을 가져오는 것이다.