FrameWork/Django

9월 14일 (수) 룸 가입하기

print(blue) 2022. 9. 15. 02:26

초본 마인드맵

 

가입하지 않은 유저 -> 가입한 유저 순으로 진행할 것

 

1. room/html

room_page.html / room_join.html

2. room/url

from django.urls import path
from . import views

urlpatterns = [
	#http://127.0.0.1:8000/room/page/<int:pk>
    path('room/page/<int:pk>', views.room_page, name='room_page'), #글상세페이지
	
    #http://127.0.0.1:8000/room/join/<int:pk>
    path('room/join/<int:pk>',views.room_join, name="room_join"), #가입
]

 

3. room/view

 

가입을 하시겠습니까?

[ if문으로 제어 -> method post or method get ]

1. 가입하기

- 가입 후 룸 상세페이지로 이동

- Room_member에 저장

2. 뒤로가기

- 룸 상세페이지로 이동

 

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.utils import timezone

#모델 가져오기
from room.models import Room, Room_member

# 가입하기
def room_join(request,pk):
    posts = Room.objects.get(pk=pk)
    members = Room_member.objects.all()
    res_data = {'posts':posts, 'members':members}
    join_user = request.user # 현재 유저
    
    if request.method == 'POST':
        memberobj = Room_member()
        memberobj.join_user = join_user 
        memberobj.group = posts
        memberobj.date_joined = timezone.now() # 현재시간
        memberobj.save()
        return render(request, 'room_page.html', res_data)
    
    return render(request, 'room_join.html',res_data)

일단 가입은 되게 ... 만들어놓음

이제 각 방마다 가입을 했는지 안했는지 제어해야함

 

4. model RoomRoom_member 

Room 의 title 과 Room_member 의 group (정확하게는 title만) 같을 때

각 방의 멤버 리스트에 멤버 렌더링하거나 

현재 로그인한 유저가 해당 방의 멤버 리스트에 있을 경우 가입됨/탈퇴하기 버튼으로 바뀐다던가

등등 제어할 수 있음

 

https://jinmay.github.io/2020/05/25/django/django-values-and-values-list/

 

[Django]values와 values_list의 차이

Django ORM 최적화 중 하나로서 필요한 필드의 값만 가져오기 위해 values()와 values_list()를 사용한다. 각 메소드의 결과는 어떻게 생겼고 차이점이 무엇인지 정리해본다. values()쿼리셋의 값을 딕셔너

jinmay.github.io

 

#room/views.py

# 모집상세페이지
def room_page(request, pk):
    post_pk = Room.objects.get(pk=pk)
    members = Room_member.objects.all()

    room_name = Room.objects.values()

    print(room_name) #요결과
    res_data = {'posts': post_pk, 'members': members }
    
    return render(request, 'room_page.html',res_data)

#room/views.py

# 모집상세페이지
def room_page(request, pk):
    post_pk = Room.objects.get(pk=pk)
    members = Room_member.objects.all()

    room_name = Room.objects.values('title')

    print(room_name) #요결과
    res_data = {'posts': post_pk, 'members': members }
    
    return render(request, 'room_page.html',res_data)

근디 문제는 model Room_member 가 관계형 데이터베이스로 

class Room_member(models.Model):
    join_user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="가입자")
    group = models.ForeignKey(Room, on_delete=models.CASCADE, verbose_name="room")
    date_joined = models.DateField(verbose_name="가입날짜")

group 의 title만 가져오고 싶은디 그 방법을 찾아야함

이 부분은 내일 더 공부해보겠습니다