添加外键到表单

时间:2015-09-13 08:50:07

标签: python django web

我有这个型号:

class Post(models.Model):
    thread = models.ForeignKey(Thread)
    post_title = models.CharField(max_length=50, blank=True)
    # other attributes

我有一个观点:

class ThreadView(CreateView):
    model = models.Post
    template_name = 'forum/thread.html'
    fields = ['post_title', 'author', 'post_text']

当我尝试发送表单时,我得到IntegrityError:NOT NULL约束失败:forum_post.thread_id。 我想,这是因为我的外键仍然是空的,但我不知道如何自动添加它。

2 个答案:

答案 0 :(得分:1)

首先,您拥有的视图名称并不明显,因为您正在尝试创建Post而不是Thread的实例。将它重命名为PostCreateView不是更好吗?

说到你得到的错误,你对外键是正确的 - 它是空的。毕竟,你不要把它设置在任何地方。您应该在表单中发送它,或者在验证时分配它。第二种方式是你在寻找:

class ThreadView(CreateView):
    model = models.Post
    template_name = 'forum/thread.html'
    fields = ['post_title', 'author', 'post_text']

    def dispatch(self, *args, **kwargs):
        self.thread = get_object_or_404(Thread, pk=kwargs['thread_id'])
        return super(ThreadView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
            form.instance.thread = self.thread
            return super(ThreadView, self).form_valid(form)

答案 1 :(得分:0)

我认为你必须将ForeginKey Feild添加到Views Feilds

fields = ['thread', 'post_title', 'author', 'post_text']

并确保thread型号

中有数据