Add, user modify
All checks were successful
Build And Test / build-and-push (push) Successful in 2m49s
All checks were successful
Build And Test / build-and-push (push) Successful in 2m49s
This commit is contained in:
@ -6,7 +6,7 @@ from rest_framework_simplejwt.tokens import RefreshToken
|
|||||||
|
|
||||||
class CustomUserAdmin(UserAdmin):
|
class CustomUserAdmin(UserAdmin):
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
list_display = ('email', 'name', 'grade', 'is_active', 'is_staff', 'jwt_preview')
|
list_display = ('email', 'name', 'grade', 'desc', 'is_active', 'is_staff', 'jwt_preview')
|
||||||
list_filter = ('grade', 'is_active', 'is_staff')
|
list_filter = ('grade', 'is_active', 'is_staff')
|
||||||
search_fields = ('email', 'name')
|
search_fields = ('email', 'name')
|
||||||
ordering = ('email',)
|
ordering = ('email',)
|
||||||
@ -15,7 +15,7 @@ class CustomUserAdmin(UserAdmin):
|
|||||||
|
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
(None, {'fields': ('email', 'password')}),
|
(None, {'fields': ('email', 'password')}),
|
||||||
('Personal Info', {'fields': ('name', 'grade')}),
|
('Personal Info', {'fields': ('name', 'grade', 'desc')}),
|
||||||
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
|
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
|
||||||
('Important dates', {'fields': ('last_login', 'created_at')}),
|
('Important dates', {'fields': ('last_login', 'created_at')}),
|
||||||
('JWT Token Preview', {'fields': ('jwt_preview',)}), # ✅ 별도 섹션으로 추가
|
('JWT Token Preview', {'fields': ('jwt_preview',)}), # ✅ 별도 섹션으로 추가
|
||||||
@ -25,7 +25,8 @@ class CustomUserAdmin(UserAdmin):
|
|||||||
(None, {
|
(None, {
|
||||||
'classes': ('wide',),
|
'classes': ('wide',),
|
||||||
'fields': (
|
'fields': (
|
||||||
'email', 'name', 'grade', 'password1', 'password2',
|
'email', 'name', 'grade', 'desc',
|
||||||
|
'password1', 'password2',
|
||||||
'is_active', 'is_staff', 'is_superuser'
|
'is_active', 'is_staff', 'is_superuser'
|
||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
|
18
users/migrations/0002_customuser_desc.py
Normal file
18
users/migrations/0002_customuser_desc.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.14 on 2025-05-17 13:04
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='customuser',
|
||||||
|
name='desc',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='설명'),
|
||||||
|
),
|
||||||
|
]
|
@ -35,6 +35,8 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
|
|||||||
email = models.EmailField(unique=True)
|
email = models.EmailField(unique=True)
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user')
|
grade = models.CharField(max_length=20, choices=GRADE_CHOICES, default='user')
|
||||||
|
desc = models.TextField(blank=True, null=True, verbose_name="설명")
|
||||||
|
|
||||||
is_active = models.BooleanField(default=True)
|
is_active = models.BooleanField(default=True)
|
||||||
is_staff = models.BooleanField(default=False)
|
is_staff = models.BooleanField(default=False)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
|
@ -7,7 +7,7 @@ class RegisterSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
fields = ('email', 'name', 'password', 'grade')
|
fields = ('email', 'name', 'password', 'grade', 'desc')
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
password = validated_data.pop('password')
|
password = validated_data.pop('password')
|
||||||
|
@ -22,5 +22,13 @@ class MeView(APIView):
|
|||||||
serializer = RegisterSerializer(user)
|
serializer = RegisterSerializer(user)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
def put(self, request):
|
||||||
|
user = request.user
|
||||||
|
serializer = RegisterSerializer(user, data=request.data, partial=True) # ✅ 부분 수정 허용
|
||||||
|
if serializer.is_valid():
|
||||||
|
serializer.save()
|
||||||
|
return Response(serializer.data)
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
class CustomTokenObtainPairView(TokenObtainPairView):
|
class CustomTokenObtainPairView(TokenObtainPairView):
|
||||||
serializer_class = CustomTokenObtainPairSerializer
|
serializer_class = CustomTokenObtainPairSerializer
|
Reference in New Issue
Block a user