images / create上的TypeError - __init __()得到了一个意外的关键字参数'save'

时间:2017-09-08 12:28:04

标签: python django

我不知道这里有什么问题。我正在尝试将来自其他网站的图像保存到我的数据库,但是我在images / create得到 TypeError - __init __()得到了一个意外的关键字参数'save'。 images是一个应用程序,create是url的名称。这是代码

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})

和forms.py也包含覆盖save()方法的代码

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

有人请帮忙!

1 个答案:

答案 0 :(得分:4)

ContentFilesave

中未使用关键字__init__
ContentFile(response.read(), save=False)
#                            ^^^ ????