我有这个型号:
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。 我想,这是因为我的外键仍然是空的,但我不知道如何自动添加它。
答案 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
型号