#django #django-forms
#django #django-формы
Вопрос:
Я пытаюсь выполнить пользовательскую проверку в форме. Однако clean_
метод не работает (независимо от того, что я пытаюсь). Это то, что у меня сейчас есть —
from django.forms import ModelForm
from django import forms
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
avatar = models.ImageField(upload_to='images/%Y/%m/%d', blank=True)
class ProfilePictureForm(ModelForm):
class Meta:
model = UserProfile
fields = ('avatar',)
def clean_avatar(self):
try:
raise # this is just to see if the clean_ is working
except:
raise
И в views
—
def getting_started_pic(request):
if request.method == 'POST':
profile.avatar = request.FILES['avatar']
profile.save()
return render_to_response (...)
Чего мне не хватает, чтобы заставить clean_avatar
метод «работать»? (В настоящее время это так, как если бы его там не было). Спасибо.
Ответ №1:
Я нигде не вижу экземпляра вашей ProfilePictureForm? Я предполагаю, что profile — это ваш экземпляр. Если это так, вам нужно вызвать is_valid() в вашем экземпляре ModelForm, чтобы был вызван ваш clean_avatar:
def getting_started_pic(request):
if request.method == 'POST':
profile.avatar = request.FILES['avatar']
if profile.is_valid():
profile.save()
return render_to_response (...)
Ответ №2:
Обычный рабочий процесс model forms — это::
def some_view(request):
profile = request.user.profile # or some other way to get user's profile
if request.method == 'POST':
form = ProfilePictureForm(request.POST, request.FILES, instance=profile)
else:
form = ProfilePictureForm(instance=profile)
if form.is_valid():
form.save()
# Redirect somewhere
# Return failed form