Привет, всем!
Сделал мултизагрузку файлов по нажатию на одну кнопку.
Проблема: При загрузке дублирует записи в базу (сохраняет и грузит дубликаты фоток). Например, гружу фотку 2,3,4 - а у меня грузить два раза и пишет в базу также 2,3,4, 2,3,4 . Не могу зафиксировать ошибку.
Предположения: либо в jquery намутил, либо не правильно форму сделал.
Вью
def add_photo(request):
if request.method == 'POST':
images = request.FILES.getlist('image',[])
item = Item(url='http://teleport.ink/', user=request.user)
item.save()
item.url += str(item.id)
item.save()
for image in images:
photo = Photo(image=image, item_id=item.id)
photo.save()
return HttpResponse(item.id)
Модель
class Photo(models.Model):
image = models.ImageField(upload_to='image', verbose_name='Фотография', blank=True)
item = models.ForeignKey(Item, related_name='items')
def get_tags(self):
return Tag.objects.filter(photo=self)
class Meta:
verbose_name = 'Фотографии'
verbose_name_plural = 'Фотография'
def __unicode__(self):
return u'%s %s' % (self.id, self.image)
Скрипт
$(function(){
$('#image_upload_form').children('input').change(function () {
$('#image_upload_form').children('input').removeAttr('id');
$('#image_upload_form').ajaxSubmit({
beforeSubmit: function(){
},
success: function(data){
var $item_id = data;
window.location.replace("/add/" + $item_id);
}
});
});
});
Шаблон
<a href="#" class="panel-general-button2" id="button-add-photo-select">
<svg class="menu-icon-svg" viewBox="0 0 24 24">
<use xlink:href="#addcontent-icon-menu" ></use>
</svg>
<form class="add-content-button" enctype="multipart/form-data" method="post" id="image_upload_form" action="/add_photo/">
{% csrf_token %}
{{ form.image }}</form>
</a>
Форма
class AddPhoto(forms.ModelForm):
class Meta:
model = Photo
widgets = {'image':MultiFileInput}
Виджет
from django.contrib.admin import widgets
from django.utils.safestring import mark_safe
class MultiFileInput(widgets.AdminFileWidget):
def render(self, name, value, attrs=None):
attrs['multiple'] = 'true'
output = super(MultiFileInput, self).render(name, value, attrs=attrs)
return mark_safe(output)
Буду рад, если подскажите.
Спасибо
Updated 20 Dec. 2014, 20:19 by makarow.dmitry.