1

I'm writing a project where you can add photos to a website from a disk or other sites. In jquery I wrote a book marklet where I can add pictures from other site. But I have problem with uploading images from the disc. I wrote model, modelform, views and html file. When I choose a img file in the form all looks OK. I'm moved to image list web page, but there is not file what I whant to upload. Image file not saving. I don't know what I did wrong. Below is my code:

models.py

class Image(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         related_name='images_created')
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200,
                        blank=True)
url = models.URLField(blank=True)
image = models.ImageField(upload_to='images/%Y/%m/%d')
description = models.TextField(blank=True)
created = models.DateField(auto_now_add=True,
                           db_index=True)
users_like = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                related_name='images_liked',
                                blank=True)

total_likes = models.PositiveIntegerField(db_index=True, default=0)


def __str__(self):
    return self.title

def save(self, *args, **kwargs):
    if not self.slug:
        self.slug = slugify(self.title)
    super(Image, self).save(*args, **kwargs)

def get_absolute_url(self):
    return reverse('images:detail', args=[self.id, self.slug])

class Meta:
    ordering = ["-image"]

forms.py

class ImageCreateForm(forms.ModelForm):
class Meta:
    model = Image
    fields = ('title', 'url', 'description')
    widgets = {
        'url': forms.HiddenInput,
    }

def clean_url(self):
    url = self.cleaned_data['url']
    valid_extensions = ['jpg', 'jpeg']
    extension = url.rsplit('.', 1)[1].lower()
    if extension not in valid_extensions:
        raise forms.ValidationError('Podany adres URL nie zawiera ' \
                                    'obrazów w obsługiwanym formacie.')
    return url

def save(self, force_insert=False,
               force_update=False,
               commit=True):
    image = super(ImageCreateForm, self).save(commit=False)
    image_url = self.cleaned_data['url']
    image_name = '{}.{}'.format(slugify(image.title),
                                image_url.rsplit('.', 1)[1].lower())

    # Pobranie pliku obrazu z podanego adresu URL.
    response = request.urlopen(image_url)
    image.image.save(image_name,
                     ContentFile(response.read()),
                     save=False)
    if commit:
        image.save()
    return image

Upload from web page

class UploadImageForm(forms.ModelForm):
class Meta:
    model = Image
    fields = ('image', 'title', 'description')

def save(self, commit=True):

    image = super(UploadImageForm, self).save(commit)
    image_name = '{}.{}'.format(slugify(image.title),
                                image_url.rsplit('.', 1)[1].lower())

    # Pobranie pliku obrazu z podanego adresu URL.
    response = request.urlopen(image_title)
    image.image.save(image_name,
                     ContentFile(response.read()),
                     save=False)
    if commit:
        image.save()
    return image

Upload from dics

views.py

   @login_required
def image_create(request):
    if request.method == 'POST':
        form = ImageCreateForm(data=request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            new_item = form.save(commit=False)
            new_item.user = request.user
            new_item.save()
            create_action(request.user, 'Added Image', new_item)
            messages.success(request, 'Obraz został dodany.')
            return redirect(new_item.get_absolute_url())
    else:

        form = ImageCreateForm(data=request.GET)

    return render(request,
                  'images/image/create.html',
                  {'section': 'images',
                   'form': form})

Upload from web page

@login_required
def image_upload(request):
    if request.method == 'POST':
        upload_form = UploadImageForm(request.POST, request.FILES)
        if ulpoad_form.is_valid():
            new_item=upload_form.save(commit=False)
            new_item.image=request.FILES['image']
            new_item.save()
            messages.success(request, 'Obraz został dodany.')
            return redirect('new_item.get_absolute_url()')
    else:
        upload_form=UploadImageForm()
    return render(request, 'images/image/upload_image.html',
                  {'upload_form': upload_form, 'section': 'images' })

Upload from dics

And upload.html

{% block content %}
    <h1>upload img</h1>
    <form action="." method="post" enctype="multipart/form-data">
        {{ upload_form.as_p }}
        {% csrf_token %}
        <input type="submit" value="Upload!!">
    </form>
{% endblock %}

I would be grateful for help

ARlen
  • 11
  • 1

0 Answers0