2016-10-20 21 views
0

我正在为一篇文章制作一个包含标题,文本和图像字段的基本博客。但是当我试图在一个视图中将模型的TextField和FileField一起保存时,我一直在获取以下错误。Django - 将用户的TextField和FileField保存在一起

错误。

AttributeError at /new/ 
'Post' object has no attribute '_committed' 
Request Method:  POST 
Request URL: http://127.0.0.1:8000/new/ 
Django Version:  1.9.8 
Exception Type:  AttributeError 
Exception Value:  
'Post' object has no attribute '_committed' 
Exception Location:  /usr/local/lib/python3.5/dist-packages/django/db/models/fields/files.py in pre_save, line 309 
Python Executable: /usr/bin/python3 
Python Version:  3.5.2 
Python Path:  
['/home/appu/Django/Colesk', 
'/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/home/appu/.local/lib/python3.5/site-packages', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages'] 

一个帖子的类。

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

的问题是,在这条线:

post.docfile = Post(docfile = request.FILES['docfile']) 

你是一个Post实例本身的DOCFILE领域相关联。该文件字段应该包含类型的对象File

参考:Django: Copy FileFields

+0

谢谢主席先生,但我要如何做,在这样的帖子被保存为一个实体的方法吗?我必须写另一个模型吗? – atsh3

+0

@ atsh3它只会被保存为一个实体。你为什么认为它会被保存为多个实体? –

+0

我试过,但我仍然无法让它工作,我该用什么替换该行? – atsh3

相关问题