Форум сайта python.su
Есть представление:
if request.method == 'POST': HousePhotoAddFormSet = formset_factory(HousePhotoAddForm, max_num=10) formset = HousePhotoAddFormSet(request.POST, request.FILES) if formset.is_valid(): try: house = House.objects.get(code=id) except House.DoesNotExist: return HttpResponseRedirect("/add/2/%s/" %(id)) for form in formset: photo = HousePhoto(house=house, **form.cleaned_data) photo.save() return HttpResponseRedirect("/add/3/%s/" %(id))
class HousePhoto(models.Model): house = models.ForeignKey(House, related_name='HousePhotoToHouse', unique=False, verbose_name=u'Объявление') photo = models.ImageField(upload_to='photo') description = models.CharField(max_length=140, unique=False, verbose_name=u'Комментарий') class Meta: verbose_name = (u'---Фотография---') verbose_name_plural = (u'---Фотографии---')
Отредактировано SorrowFuck (Янв. 25, 2013 14:55:11)
Офлайн
покажи HousePhotoAddForm
Офлайн
class HousePhotoAddForm (forms.Form): photo = forms.ImageField() description = forms.CharField(max_length=140, widget=forms.Textarea(attrs={ 'class': 'photo_description', 'placeholder': u'Краткое описание'}))
Отредактировано SorrowFuck (Янв. 25, 2013 19:36:00)
Офлайн
SorrowFuck
Передаю в нее несколько значений с помощью post, но сохраняется только первое каждый раз, не пойму, где я накосячил?
for form in formset: photo = HousePhoto(house=house, **form.cleaned_data) photo.save() return HttpResponseRedirect("/add/3/%s/" %(id)) # вот тут
Отредактировано buddha (Янв. 26, 2013 02:47:51)
Офлайн
Вот это спасибо, совсем не заметил, да, надо бы прерываться
Офлайн
Почему-то форма не проходит проверку на валидность.
if request.method == 'GET': data_dict = request.GET.dict() HousePhotoAddFormSet = formset_factory(HousePhotoAddForm, extra=data_dict['form-TOTAL_FORMS'], max_num=data_dict['form-TOTAL_FORMS']) formset = HousePhotoAddFormSet(request.GET) if formset.is_valid(): try: house = House.objects.get(code=id) except House.DoesNotExist: return HttpResponseRedirect("/add/2/%s/" %(id)) for form in formset: check = HousePhotoAddForm(form.cleaned_data) if check.is_valid(): photo = HousePhoto(house=house, **form.cleaned_data) photo.save() return HttpResponseRedirect("/add/3/%s/" %(id)) else: return HttpResponseRedirect("/add/2/%s/" %(id))
Офлайн
Вставь строчку кода, посмотри что выведет:
if request.method == 'GET': data_dict = request.GET.dict() HousePhotoAddFormSet = formset_factory(HousePhotoAddForm, extra=data_dict['form-TOTAL_FORMS'], max_num=data_dict['form-TOTAL_FORMS']) formset = HousePhotoAddFormSet(request.GET) print formset.errors #посмотри , что за ошибки print formset.non_form_errors() # обе строки выводят одну инфу, просто по разному if formset.is_valid():
Офлайн
formset.errors вернул
[{'photo': [u'Обязательное поле.']}]
GET Variables Variable Value form-MAX_NUM_FORMS form-0-photo 9ВАРИАНТ.jpg form-INITIAL_FORMS 0 form-0-description fsddfs form-TOTAL_FORMS 1
data_dict = request.GET.dict() HousePhotoAddFormSet = formset_factory(HousePhotoAddForm, extra=data_dict['form-TOTAL_FORMS'], max_num=data_dict['form-TOTAL_FORMS']) formset = HousePhotoAddFormSet(request.GET) if formset.is_valid(): try: house = House.objects.get(code=id) except House.DoesNotExist: return HttpResponseRedirect("/add/2/%s/" %(id)) for form in formset: check = HousePhotoAddForm(form.cleaned_data) if check.is_valid(): photo = HousePhoto(house=house, **form.cleaned_data) photo.save()
Отредактировано SorrowFuck (Янв. 30, 2013 11:42:38)
Офлайн
Так, во-первых не форма, а формсет не проходит валидацию. Попробую предположить, что ты не заполняешь экстра формы. На ошибку можно опираться…
И почему данные берёшь из GET запроса, а не из POST?
Офлайн
В форму не передаете данные фото
formset = HousePhotoAddFormSet(request.GET)
formset = HousePhotoAddFormSet(request.POST, request.FILES)
Офлайн