我有两个模型,分别是Task和TaskNote,当我从当前Task的视图中调用表单时,我试图将当前Task的主键作为初始值输入到TaskNoteForm中。
在任务详细信息视图上,有一个指向表单的链接,用户可以在其中编写将显示在详细信息视图上的注释。我希望表单将Task实例的主键设置为TaskNote中的外键(例如,作为模型属性“ subject”)。
我的解决方案是使用'HTTP_REFERER'请求获取URL并从URL解析pk,然后将pk传递到视图中的上下文数据中,最后将其作为值输入到模板中。例如:
# Models class Task(models.Model): id = models.AutoField( primary_key=True) ... class TaskNote (models.Model): ... subject = models.ForeignKey( Task, on_delete=models.CASCADE) ... # view def get_url_pk(self): url = self.request.META.get('HTTP_REFERER') t = url.split('/') pk = int(t[-1]) return pk class TaskNotesCreate(CreateView): template_name='tasknotes_new.html' form_class = TaskNoteForm model = TaskNote def get_context_data(self, **kwargs): context = super(TaskNotesCreate, self).get_context_data(**kwargs) context['pk'] = get_url_pk(self) return context def get_success_url(self, **kwargs): obj = self.object return reverse('task_view', kwargs={'pk': obj.subject_id}) # template ... <div class="form-group"> <label for="exampleInput" class="required"> <input type="hidden" name="subject" value="{{ pk }}"> </div>
这很好,但是...
我了解到HTTP_REFERER不是首选方法,因为可以在某些浏览器中将其禁用。我似乎找不到文档中首选的方法,因此,如果有人可以帮助我,那就太好了。而且,在我花很多时间一起破解其他东西之前,我想知道...
是否有更好,更可接受的方法将pk传递给表单?
谢谢
我有两个模型,分别是Task和TaskNote,当试图从当前Task的视图中调用表单时,我试图将当前Task的主键作为初始值输入到TaskNoteForm中。在...
您可以通过以下方式来编辑模板,而不是编辑模板: