작성
·
218
·
수정됨
0
안녕하세요.
커스텀 유저 모델을 만들어 잘 적용하였습니다.
템플릿 쪽에서는 로그인된 유저의 {{ user }} 형태로 접근하여 커스텀으로 만든 필드들의 값에 접근이 잘 됩니다.
views에서 request.user 를 할 경우, 커스텀 된 필드들의 값을 사용할 수 없고 기본 유저 모델의 필드값만 나오고 있습니다. 어떤 장치를 해주어야 커스텀 된 필드 값들을 모두 사용할 수 있는지 찾아보았지만 정확히 알아내지 못하였습니다...
임시로 request.user를 통해 현재 로그인 된 사용자 정보를 가져오고 커스텀 유저 모델에서 동일한 유저를 찾아서 정보를 사용하는 형태로 해두었는데, 좋은 방향이 아닌듯하여 도움을 얻고자 질문을 남기게 되었습니다.
def home(request):
login_user = request.user
user_site = User.objects.filter(email=login_user).get().site
site_id = SiteInfo.objects.filter(site_name=user_site).get().pk
boat_info = BoatInfo.objects.filter(site=site_id)
return render(request, 'monitoring/home.html', {
'boat_info': boat_info,
})
번외로 템플릿에서 DB 데이터 갯수만큼만 DIV를 행렬로 만들어야 하는데, 짧은 지식으로 아래와 같이 구현해 보았습니다만, 좋은 방향으로 보이진 않아서 계속 고민 중에 있습니다. 한번 살펴봐 주시면 감사하겠습니다(꾸벅)
{% for boat in boat_info %}
{% if forloop.counter0 != 0 and forloop.counter0|divisibleby:3 %}
</div>
{% endif %}
{% if forloop.counter0|divisibleby:3 %}
<div class="row">
{% endif %}
<div class="col">{{ boat }}}</div>
{% if forloop.last %}
</div>
{% endif %}
{% endfor %}
답변 1
0
안녕하세요.
home 뷰에서 쓰신 User 모델은 직접 정의하신 모델이신거죠? settings.AUTH_USER_MODEL 설정과는 무관한 모델이 맞는 지요?
request.user 속성은 인증여부에 따라 settings.AUTH_USER_MODEL 에 지정된 모델(디폴트 값: "auth.User" => auth 앱의 User 모델)을 통해, 데이터베이스를 조회합니다.
모델의 이름만 User로 지정한다고 해서, 그 User 모델이 장고 프로젝트의 유저 모델로 활용되는 것은 아닙니다. 하나의 장고 프로젝트에는 다수의 장고 앱(app)이 있을 수 있고, 각 장고 앱마다 User라는 이름의 모델이 하나씩 존재할 수 있습니다. 그렇게 존재해도 문제되지 않습니다.
settings.AUTH_USER_MODEL에 명시된 모델이 아닌 그 외의 모델은 뷰 단에서 직접 조회해서, 템플릿의 context data로 넘겨서 처리하셔야 합니다. 쓰신 코드 처럼요.
그리고, 그리드 방식으로 레이아웃을 배치하고싶으신 듯 한데요. 이를 쉽게 도와주는 CSS가 있습니다. CSS Flex와 CSS Grid인데요. bootstrap4와 bootstrap5에서도 이를 도와주는 클래스가 있습니다.
아래 포스팅에 설명이 잘 되어있으니, 이 기회에 꼭 익혀보시길 추천드립니다.
위 포스팅대로 해보시고, bootstrap4의 flex, bootstrap5의 flex를 써보시는 것도 좋습니다.
살펴보시고, 추가 질문 댓글 남겨주세요.
화이팅입니다. :-)
views에서 사용할 때, request.user.site 에서 site 부분에 밑줄이 그어지고 request.user. 에서 바로 연동되는 곳에 안떠서 안되는거라 생각했는데 상관없이 그냥 넣어보니깐 잘 나오네요,,,,,,,,
@김도하 : IDE에서는 request.user 만으로는 타입 추론이 어렵기에 IDE에서 속성을 정확히 뽑아주기는 힘듭니다. user: User = request.user 처럼 Type Hinting을 지정하시고, user 객체를 통해 접근하시면 보다 원활히 타입의 혜택을 누리실 수 있습니다.
레이아웃은 Grid 사용해서 쉽게 처리하였습니다!
말씀해주신 settings부분은
이렇게 세팅을 해둔 상태였습니다.
accounts 앱을 만들고, AbstractBaseUser, BaseUserManager 을 사용해서 커스텀유저를 만들어둔 상태입니다. 템플릿쪽에서는 별다른 처리없이 바로 user 오브젝트에 붙었을때 커스텀해둔 필드 값들이 바로 사용되어 지는데, 뷰 쪽에서는 request를 통한건 AUTH_USER_MODEL을 세팅해둔것과 상관없이 장고 기본 유저 모델로 밖에 연결이 안되는 건가요?