본문 바로가기

내일 배움 캠프/TIL

TIL) 9주차 2일

오늘 본격적으로 팀과 협의해서 백엔드부분을 나눠서 작업했다. 

 

저녁에 풀 리퀘스트를 하며 머지를 하는 시간을 가졌는데

 

역시 한번에 끝나는 경우가 없었다..

 

여전히 깃허브는 다루기가 매우 힘든것같다  ㅠㅠ..

 

내일도 화이팅!


admin.py의 UserAdmin 클래스 추가하기

기본 admin 페이지는 다음과 같다.

 

이런 상태의 admin 페이지를 UserAdmin이라는 클래스를 통해 커스텀 해줄 것이다.

먼저 기본 admin를 꾸며볼 것이다.

class UserAdmin(BaseUserAdmin):
    form = UserChangeForm
    add_form = UserCreationForm
    
    list_display = ["username", "email", "name", "age", "introduction", "is_admin"]
    list_filter = ["is_admin"]

 

다음은  유저 아이디를 눌렀을 때의 기본 수정 페이지이다.

 

이런 기본 수정 페이지를 커스텀을 해주면,

class UserAdmin(BaseUserAdmin):
	...
    fieldsets = [
            # 기본 정보
            (None, {"fields": ["username", "password"]}),
            # 개인 정보 : Personal info
            ("Personal info", {"fields": ["email", "name", "age", "introduction"]}),
            ("Permissions", {"fields": ["is_admin"]}),
        ]

 

다음은 admin 페이지에서 유저를 추가해주는 페이지이다.

class UserAdmin(BaseUserAdmin):
	...
    # user를 추가를 할때 적을것들을 결정하는 것
    add_fieldsets = [
            (
                None,
                {
                    "classes": ["wide"],
                    "fields": ["username", "email", "name", "age", "introduction", "password1", "password2"],
                },
            ),
        ]
        search_fields = ["email"]
        ordering = ["email"]
        filter_horizontal = []

 

전체 코드는 다음과 같다.

class UserAdmin(BaseUserAdmin):
    form = UserChangeForm
    add_form = UserCreationForm

    # 목록에 나오는것을 정하는것
    list_display = ["username", "email", "name", "age", "introduction", "is_admin"]
    list_filter = ["is_admin"]
    fieldsets = [
        # 기본 정보
        (None, {"fields": ["username", "password"]}),
        # 개인 정보 : Personal info
        ("Personal info", {"fields": ["email", "name", "age", "introduction"]}),
        ("Permissions", {"fields": ["is_admin"]}),
    ]
    
    # user를 추가를 할때 적을것들을 결정하는 것
    add_fieldsets = [
        (
            None,
            {
                "classes": ["wide"],
                "fields": ["username", "email", "name", "age", "introduction", "password1", "password2"],
            },
        ),
    ]
    search_fields = ["email"]
    ordering = ["email"]
    filter_horizontal = []

admin.site.register(User, UserAdmin)
admin.site.unregister(Group)

 


follow(팔로우) 기능 추가하기

models.py의 User 클래스에 followings를 추가해준다.

class User(AbstractBaseUser):
	...
	followings = models.ManyToManyField('self', symmetrical=False, related_name='followers', blank=True)

 

views.py에 FollowView 클래스를 추가해준다.

class FollowView(APIView):
    def post(self, request, user_id):
        you = get_object_or_404(User, id=user_id)
        me = request.user
        
        if me in you.followers.all():
            you.followers.remove(me)
            return Response("unfollow했습니다.",status=status.HTTP_200_OK)
        else:
            you.followers.add(me)
            return Response("follow했습니다.",status=status.HTTP_200_OK)

request.user을 print하면 username이 나오고, 'you'에도 User에서 user_id를 받아와서 username을 저장한다.

그리고 you.followers.all()에서  followers를 써주는 이유는 related_name를 followers라고 지정해 주었기 때문이다.  

 


 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 10주차 1일  (0) 2023.05.15
TIL) 9주차 3일  (0) 2023.05.11
TIL) 9주차 1일  (0) 2023.05.09
TIL) 8주차 4일  (0) 2023.05.07
TIL) 8주차 3일  (0) 2023.05.04