сбросить поле изображения на изображение по умолчанию, используя условие if django - PullRequest
0 голосов
/ 18 января 2020

Форма моего профиля имеет две половины: индивидуальную и N GO (n go часть формы имеет поле изображения). пользователь может переключаться между типами профилей. если пользователь переключается с N GO на индивидуальный, я обновляю поля n go, связанные с NA, в моей функции. Однако мне нужно сбросить поле изображения, связанное с N GO, по умолчанию и удалить изображение.

models.py

class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
# on_deleting user, profile will also be deleted
image = models.ImageField(default="profilepic.jpg",upload_to="profile_pictures")
profile_type = models.CharField(max_length=20,choices=PROFILE_TYPES, default='individual')
dob = models.DateField(null=True)
bio = models.TextField(null=True)
anonymous = models.BooleanField(default=False)
ngo_name = models.CharField(max_length=200, blank=True)
ngo_address = models.CharField(max_length=200, blank=True)
ngo_phone = models.CharField(max_length=200, blank=True)
ngo_registration_num = models.CharField(max_length=200, blank=True)
ngo_registration_cert = models.ImageField(default="default_ngo.png",upload_to="ngo_documents")
ngo_status = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
    return f'{self.user.username} Profile'

forms.py

class ProfileForm(forms.ModelForm):
class Meta:
    model = Profile
    fields = ['image','profile_type','dob','bio','anonymous','profile_type','ngo_name','ngo_address','ngo_phone','ngo_registration_num','ngo_registration_cert','ngo_status']

views.py

@login_required
def profile_edit(request):
    if request.method == 'POST':
        u_form = UserUpdateForm(request.POST, instance=request.user)
        p_form = ProfileForm(request.POST, request.FILES, instance=request.user.profile)
        if u_form.is_valid() and p_form.is_valid():
            if p_form.cleaned_data.get('profile_type') == 'ngo':
                u_form.save()
                p_form.save()
                messages.success(request, f'your profile has been updated as NGO ')
                return redirect('users:profile')
            else:
                u_form.save()
                temp_p_form = p_form.save(commit=False)
                temp_p_form.ngo_name = 'NA'
                temp_p_form.ngo_address = 'NA'
                temp_p_form.ngo_phone = 'NA'
                temp_p_form.ngo_registration_num = 'NA'
                temp_p_form.ngo_phone = 'NA'
                temp_p_form.ngo_status = False
                temp_p_form.ngo_registration_cert = NEED TO SET THIS TO DEFAULT IMAGE AGAIN
                temp_p_form.save()
                messages.success(request, f'your profile has been updated as Individual ')
                return redirect('users:profile')

    else:
        u_form = UserUpdateForm(instance=request.user)
        p_form = ProfileForm()
    context = {
        'u_form' : u_form,
        'p_form' : p_form
    }
    return render(request, 'users/profile_edit.html',context)

1 Ответ

1 голос
/ 18 января 2020

в вашей модели:

image = models.ImageField(default="profilepic.jpg",upload_to="profile_pictures", blank=True, null=True)

и в поле зрения:

temp_p_form.ngo_status = False
temp_p_form.image.delete()
temp_p_form.image = None
...