django - 将 url 参数传递给 Django ModelForm 而不将其呈现为表单上的输入
问题描述
我有一个/<subject_id>/comments/new/
呈现 Django的 url ModelForm
。我正在使用派生的视图类FormView
来处理表单。我希望执行以下操作:
subject_id
不应出现在呈现的表单上。subject_id
应该在被调用之前添加到表单中is_valid()
,或者如果这不可能,应该添加到Comment
实例中。
表格/comment_form.py:
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ['text']
视图.py:
class CommentCreate(FormView):
form_class = CommentForm
def form_valid(self, form):
# Do some stuff to the validated Comment instance
# Maybe save the comment, maybe not
return super().form_valid(form)
我该怎么做呢?如果我添加subject_id
为一个字段,CommentForm
那么它会出现在呈现的表单上。如果我不这样做,则使用 `self.kwargs['subject_id'] 中的 subject_id 实例化表单并抱怨“意外的关键字参数”。
解决方案
在文档中四处寻找之后,我发现正确的答案是使用该get_form()
方法使用我不想出现在表单上的数据预填充表单,但需要存在以进行验证。
class CommentCreate(FormView):
form_class = CommentForm
def get_form(self):
self.subject= get_object_or_404(Subject, id=self.kwargs['subject_id'])
partial_comment = Comment(user=self.request.user, subject=self.subject)
form = CommentForm(**self.get_form_kwargs(), instance=partial_comment)
return form
推荐阅读
- python - 如何在没有 kv 文件的情况下打开新的 kivy 屏幕?
- c# - 尝试使用 C# 通过 FTP 上传文件时出错
- r - ggplot:x轴标签与用于美学的数据不同
- java - 如何使用Lamda表达式java 8过滤两张地图并制作第三张地图
- python-3.x - 添加未在 ElasticSearch 索引中显示的新文档
- git - 无法使用 git 配置文件 ssh
- sql - QT Sql 错误:未定位在有效记录上
- private-key - 如何在直播环境中生成私钥
- swift - Swift 中月份和星期的名称
- android - 如何在我的 Android 应用程序中使用 REST API 密钥?