2016-10-21 3 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 %} 

나는 너무 가까이 해요,하지만 난 틀렸다 곳 난 그냥 알아낼 수 없습니다. Help. 대신

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

+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 = form.save(commit=False) 

문제점은 당신이 PostForm 클래스의 새 인스턴스를 만들 것입니다 않습니다. 대신 이미 생성 된 것을 사용하십시오.

관련 문제