Reputation: 703
I don't know what's wrong here. I'm trying to save images from other websites to my database, but I get TypeError at images/create - __init__() got an unexpected keyword argument 'save'. images is an app and create is name of the url. Here's the code
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^create/$', views.image_create, name='create'),
]
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .forms import ImageCreateForm
@login_required
def image_create(request):
if request.method == 'POST':
# Form is sent
form = ImageCreateForm(data=request.POST)
if form.is_valid():
# Form data is valid
cd = form.cleaned_data
new_item = form.save(commit=False)
# Assign current user to the item
new_item.user = request.user
new_item.save()
messages.success(request, 'Image added successfully')
# Redirect to the newly created item detail view
return redirect(new_item.get_absolute_url())
else:
# Build form with data provided by the bookmarklet via GET
form = ImageCreateForm(data=request.GET)
return render(request, 'images/image/create.html',
{'section' : 'images', 'form' : form})
and the forms.py which also contains code to override the save() method
from urllib import request
from django import forms
from django.core.files.base import ContentFile
from django.utils.text import slugify
from .models import Image
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('the given URL doesn\'t match valid image extensions')
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())
# Download image from given URL
response = request.urlopen(image_url)
image.image.save(image_name, ContentFile(response.read(), save=False))
if commit:
image.save()
return image
Somebody help please!
Upvotes: 2
Views: 1537
Reputation: 78536
ContentFile
takes no keyword save
in its __init__
:
ContentFile(response.read(), save=False)
# ^^^ ????
Upvotes: 4