3

簡単な画像のアップロードを試みると、次のエラーが表示されます。

TypeError at /upload/
__init__() got an unexpected keyword argument 'instance'

関連するコードの抜粋を次に示します (さらに必要な場合はお知らせください)。

# Models

class Photo(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    title = models.CharField(max_length=255)
    image = models.ImageField(upload_to='photos/'+str(uuid.uuid4())+'/')

# Views

class PhotoUploadView(CreateView):
    model = Photo
    form_class = PhotoUploadForm
    template_name = 'upload.html'
    success_url = '/thanks/'

# Forms

class PhotoUploadForm(forms.Form):
    image = forms.ImageField()
    title = forms.CharField(max_length=255)

# Urls

urlpatterns = patterns('',
    url(r'^upload/', views.PhotoUploadView.as_view()),
)
4

1 に答える 1

6

SingleObjectMixinを実装する View クラスで「モデル」属性を指定したため、例外が発生しています。ただし、レンダリングする Photo モデルのインスタンスを渡していません。

新しい写真を作成したいだけなので、View クラスからモデル属性を削除する必要があります。

# views.py
from django.views.generic import CreateView
from myapp.forms import PhotoUploadModelForm

class PhotoUploadView(CreateView):
    form_class = PhotoUploadModelForm
    template_name = 'upload.html'
    success_url = '/thanks/'

ModelFormから継承するようにフォーム クラスを変更します。

# forms.py
from django import forms
from myapp.models import Photo

class PhotoUploadModelForm(forms.ModelForm):

    class Meta:
        model = Photo
        fields = ['image', 'title']
于 2013-03-28T20:14:37.123 に答える