2016-10-21 20 views
0

私は非常にポストのある画像をアップロードして完全なブログを作っています。しかし、私は適切にビューとモデルを正常に画像をアップロードするために動作させることができないので、壁にぶつかり、前進することができません。Django - "1つの必須位置引数が欠落しています:アップロード中に 'self'"エラーが発生しました。

エラーが発生しています。

TypeError at /new/ 
save() missing 1 required positional argument: 'self' 
Request Method: POST 
Request URL: http://127.0.0.1:8000/new/ 
Django Version: 1.9.8 

マイモデルクラス。

class Post(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length = 200) 
    text = models.TextField() 
    docfile = models.FileField(upload_to='documents/%Y/%m/%d') 
    created_date = models.DateTimeField(default = timezone.now) 
    published_date = models.DateTimeField(blank = True, null = True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 
    def __str__(self): 
     return self.title 

フォーム。

class PostForm(forms.ModelForm): 

    class Meta: 
     model = Post 
     fields = ('title' ,'text','docfile',) 

表示。

def new_post(request): 
    if request.method == 'POST': 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = PostForm.save(commit = False) 
      post.docfile = request.FILES["docfile"] 
      post.author = request.user 
      post.published_date = timezone.now() 
      post.save() 
      return redirect('post_detail', pk = post.pk) 
    else: 
     form = PostForm() 
    return render(request, 'core/post_edit.html', {'form' : form}) 

HTMLテンプレート

{% extends 'core/main.html' %} 
{% block content %} 

<h1>New Post</h1> 
    <form method="POST" class="post-form" enctype="multipart/form-data">{% csrf_token %} 
     {{form.as_p}} 
     <button type="submit" class="save btn btn-default">Save</button> 
    </form> 

{% endblock %} 

私はとても近いんだけど、私が間違っているところ私はちょうど把握することはできません。 ヘルプ。

+0

完全なトレースバックを表示してください。 – Alasdair

答えて

0

アパート前の回答で述べたエラーから、あなたがビューで手動docfile属性を設定する必要はありません、フォームがupload_to引数(https://docs.djangoproject.com/es/1.10/ref/models/fields/#django.db.models.FileField.upload_toを参照)で指定された場所に自動的にファイルを保存します。

そして、あなたはファイルを手動で設定したい場合は、これは正しい方法(https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.fields.files.FieldFile.saveを参照)のようになります。

post.docfile.save(name, request.FILES["docfile"], save=False) 

あなたはすぐにそれを保存したい場合は、保存の引数を省略します。

+0

私はすでにモデルの画像の名前を宣言しているので、save()関数にその名前引数を渡すか、デフォルト名を渡すのですか? – isht3

1

代わりの

def new_post(request): 
    if request.method == 'POST': 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = PostForm.save(commit = False) 

def new_post(request): 
    if request.method == 'POST': 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = form.save(commit=False) 

問題を行うあなたはPostFormクラスの新しいインスタンスを作成することです。代わりに、すでに作成したものを使用してください。

関連する問題