#python #django
#python #django
Вопрос:
У меня есть эти модели:
class Gallery(models.Model):
HeadImage = models.ImageField(upload_to="gallery")
class Image(models.Model):
Image = models.ImageField(upload_to="gallery")
Gallery = models.ForeignKey(Gallery, related_name='images')
class Tour(models.Model):
Name=models.CharField(max_length=100)
Count=models.SmallIntegerField()
ActionUser=models.ForeignKey(User,editable=False)
Gallery = models.OneToOneField(Gallery,editable=False)
как вы можете видеть, у меня есть форма для тура, форма для галереи и набор форм для изображений галереи, в режиме редактирования я хочу отредактировать тур с его галереей и изображениями галереи.это код для редактирования тура с его связанными объектами:
def edittour(request,key,tour_id):
ImageFormSet = inlineformset_factory(Gallery,Image, can_delete=False,extra=4)
tourinstance=Tour.objects.get(pk=tour_id)
if request.method == 'POST':
gform=GalleryForm(request.POST,request.FILES,instance=tourinstance.Gallery)
if gform.is_valid():
gallery=gform.save(commit=False)
formset=ImageFormSet(request.POST, request.FILES, instance=tourinstance.Gallery)
if formset.is_valid():
gallery.save()
formset.save()
tform = TourForm(request.POST, request.FILES,instance=tourinstance)
if tform.is_valid():
tour=tform.save(commit=False)
tour.ActionUserCode=User.objects.get(pk=1)
tour.save()
return render_to_response('airAgency/edittour.html', {'tform': tform,'gform':gform,'formset':formset})#'airAgency/edittour/%i/' % (tour.pk))
else:
pass
tform = TourForm(instance=tourinstance)
gform=GalleryForm(instance=tourinstance.Gallery)
formset=ImageFormSet(instance=tourinstance.Gallery)
return render_to_response('airAgency/edittour.html', {'tform': tform,'gform':gform,'formset':formset})
это хорошо работает, когда я редактирую Tour, но когда я редактирую Image_set, связанный с галереей, появляется эта ошибка:
MultiValueDictKeyError at /airAgency/mastane/edittour/1/
"Key 'images-0-id' not found in <QueryDict: {u'Count': [u'15'], u'images-TOTAL_FORMS': [u'5'], u'images-MAX_NUM_FORMS': [u''], u'HeadImage': [u''], u'Description': [u'-'], u'PriceUnitCode': [u'1'], u'images-3-Image': [u''], u'images-2-Image': [u''], u'Price': [u'15000000'], u'StatusTypeCode': [u'2'], u'images-INITIAL_FORMS': [u'1'], u'images-0-Image': [u''], u'csrfmiddlewaretoken': [u'e0a3aef084f11305a7610befda7cb27a'], u'images-4-Image': [u''], u'Name': [u'\u0645\u0627\u0644\u0632\u06cc']}>"
Request Method: POST
Request URL: http://127.0.0.1:8080/airAgency/mastane/edittour/1/
Django Version: 1.3
Exception Type: MultiValueDictKeyError
Exception Value:
"Key 'images-0-id' not found in <QueryDict: {u'Count': [u'15'], u'images-TOTAL_FORMS': [u'5'], u'images-MAX_NUM_FORMS': [u''], u'HeadImage': [u''], u'Description': [u'-'], u'PriceUnitCode': [u'1'], u'images-3-Image': [u''], u'images-2-Image': [u''], u'Price': [u'15000000'], u'StatusTypeCode': [u'2'], u'images-INITIAL_FORMS': [u'1'], u'images-0-Image': [u''], u'csrfmiddlewaretoken': [u'e0a3aef084f11305a7610befda7cb27a'], u'images-4-Image': [u''], u'Name': [u'\u0645\u0627\u0644\u0632\u06cc']}>"
Exception Location: C:Python26libsite-packagesdjangoutilsdatastructures.py in __getitem__, line 256
…
Комментарии:
1. обычно у вас больше шансов получить хорошую помощь, если вы сократите свой пример до минимума, необходимого для отображения вашей проблемы (например, удалив весь остальной код).) Это имеет дополнительный бонус, заключающийся в том, что ошибка часто становится достаточно очевидной, чтобы вы могли заметить ее самостоятельно
2. хорошо! теперь я сократил код. пожалуйста, помогите.
Ответ №1:
Похоже, что вы вручную отображаете форму в своем шаблоне и пропускаете поле id. Убедитесь, что вы включили {{ form.id }}
для каждой формы в formset.
<form method="post" action="">
{{ formset.management_form }}
{% for form in formset %}
{{ form.id }}
<ul>
<li>{{ form.title }}</li>
</ul>
{% endfor %}
</form>
Для получения дополнительной информации см. Документы по использованию наборов форм модели в шаблоне.