django 프로필 , 수정 구현 질문입니다.

조회수 703회

django 회원가입 하여 로그인하면 프로필 볼수있고 수정을 하게되면 여러 개인정보, 프로필사진, 비밀번호 등 수정 할수있게 하려고 하는데 이미지 파일 업로드 하는 부분이 저렇게 나와서 질문드립니다. 현재 수정을 하게되면 이렇게 보이는데

이미지

이미지 업로드 하는곳 위에 현재 파일, clear 없애는 방법이 있나요??

이미지

//form.py
class CustomUserChangeForm(forms.ModelForm):
    #password = ReadOnlyPasswordHashField(label='password', help_text="you can't edit password")

    class Meta:
        model = get_user_model()
        fields = ('profile_image', 'username', 'bio', 'phoneNumber', 'gender', 'email', 'password')
//view.py
@require_http_methods(['GET', 'POST'])
@login_required
def update(request):
    if not request.user.is_authenticated:   
        return redirect('users:index')
    if request.method == "POST":
        form = CustomUserChangeForm(request.POST, request.FILES, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('users:index')
    else:
        form = CustomUserChangeForm(instance=request.user)
    context = {'form': form}
    return render(request, 'users/profile_edit.html', context)
//profile_edit.html
<form class="text-gray-6 md:w-8/12 dark:text-gray-5" method="post"
                              enctype="multipart/form-data">
                            {% csrf_token %}
                            {% for field in form %}
                                    <div class="form-group">
                                        <label class="mb-1">{{ field.label }}</label>
                                        {{ field }}
                                        <small class="text-red-400 mt-1">{{ error }}</small>
                                    </div>
                            {% endfor %}

                            <div class="form-group flex-row">
                                <button type="submit" class="btn-submit w-full md:w-auto px-6 md:px-8">
                                    <span>Save</span>
                                </button>
                            </div>
                        </form>
//model.py
class OverwriteStorage(FileSystemStorage):
    def get_available_name(self, name, max_length=None):
        if self.exists(name):
            os.remove(os.path.join(settings.MEDIA_ROOT, name))
        return name


def profile_upload_to(instance, filename):
    cls_name = instance.__class__.__name__.lower()
    file_name = uuid.uuid4().hex
    ymd_path = timezone.now().strftime('%Y/%m/%d')
    extension = os.path.splitext(filename)[-1].lower()
    return '/'.join([
        'profile_upload',
        ymd_path,
        file_name + extension,
    ])

class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    email = models.EmailField(max_length=255, verbose_name="email", unique=True)
    password = models.CharField(max_length=255, verbose_name='password')
    username = models.CharField(max_length=64, verbose_name="username", unique=True)
    registered_dttm = models.DateTimeField(auto_now_add=True, verbose_name='registered_date')
    phoneNumber = PhoneNumberField(unique=True, null=True, blank=False)
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=2)
    last_login = models.DateTimeField(auto_now_add=True, verbose_name="Last Login")
    bio = models.TextField(blank=True, null=True)
    profile_image = models.ImageField(null=True, blank=True, upload_to=profile_upload_to, storage=OverwriteStorage())
    image = ImageSpecField(source='profile_image', processors=[Thumbnail(64, 64), ], format='JPEG', options={'quality': 90, })


    objects = UserManager()
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)