2017-03-05 60 views
0

我称之为一个Django模型“后”,我想这与URL添加一个帖子的时候:(Django的)获取主键形式提交表单,并使用它重定向

url(r'^newpost/', views.PostFormView.as_view(), name='add'), 

它重定向我到后添加的URL的详细信息页面:

url(r'^(?P<pk>[0-9]+)/$', PostDetailView, name='detail'), 

其中pk是id(后添加的主键)

我的岗位模型如下:

class Post(models.Model): 
    person = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
    domain = models.ForeignKey(Domain, on_delete=models.CASCADE) 
    speciality = models.ForeignKey(Speciality, on_delete=models.CASCADE) 
    level = models.ManyToManyField(Level) 

    date_post = models.DateTimeField() 
    title = models.CharField(max_length=200) 
    description = models.CharField(max_length=1000) 
    is_deleted = models.BooleanField(default=False) 
    date_delete = models.DateTimeField() 

我PostFormView视图来添加一个新的职位是:

class PostFormView(View): 
    form_class = PostCreationForm 
    template_name = 'posts/new_post.html' 

    def get(self, request): 
    form = self.form_class(None) 
    return render(request, self.template_name, {'form': form}) 

    def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 
     post = form.save(commit=False) 
     post.person_id=request.user.id 
     post.save() 

     if post is not None: 
      return redirect('posts:detail', post.id) 

和我的提交形式如下:

<form class="form-horizontal" role="form" action="{% url 'posts:detail' pk=1 %}" method="post"> 
       {% csrf_token %} 
       {% include 'form-template.html' %} 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <button type="submit" class="btn btn-success"> Add the post </button> 
        </div> 
       </div> 
      </form> 

,如果我把一个空的行动“”或者我改变网址到另一个视图或我删除窗体中的PK我得到这个错误:

OperationalError at /posts/newpost/ 
table posts_post has no column named person_id 

怎么可以我提交表单,获取提交的帖子的ID并将其重定向到详细url。

回答

1

此错误与提交或重定向无关。

您已将person字段添加到模型中,但尚未运行数据库迁移。

+0

的确如此,我忘记了迁移数据库。现在它可以工作 – A2maridz