好的,我的CreateView正常工作,我的UpdateView正常工作,但我想在我的模板中显示几个字段作为文本。所以我想我不会将它们包含在字段列表中,但需要在渲染之前将它们添加到上下文中,但我无法弄清楚如何获取这些值。
我的模特:
class ProjectStatus(models.Model):
name = models.CharField(max_length=8)
class Project(models.Model):
name = models.CharField(max_length=30)
status = models.ForeignKey(ProjectStatus)
class WorkLog(models.Model):
project = models.ForeignKey(Project)
author = models.ForeignKey(User)
log_date = models.DateField( default=datetime.date.today)
accomplishments = models.TextField()
我的观点:
class WorklogUpdate(UpdateView):
model = WorkLog
fields = [ 'project', 'log_date', 'accomplishments']
template_name_suffix = '_update_form'
def get_form(self, form_class):
form = super(WorklogUpdate, self).get_form(form_class)
form.fields['log_date'].widget.attrs.update({'class': 'datepicker'})
return form
@method_decorator(permission_required('worklogs.change_worklog'))
def dispatch(self, request, *args, **kwargs):
return super(WorklogUpdate, self).dispatch(request, *args, **kwargs)
和我的模板:
{% extends "worklogs/base.html" %}
{% block title %}Edit Worklog{% endblock %}
{% block content %}
<h3>Project {{ form.project.value }}</h3> // Just need the project name
<h4>{{ form.log_date.value }}</h4> // Just the worklog log_date value
<form action="" method="post">{% csrf_token %}
{{ form.as_p }} // essentially just the accomplishments field
<input type="submit" value="Update" />
</form>
{% endblock %}
在我的表单中,我希望将'project'和'log_date'作为文本发送到模板,而不是显示为字段,将成就留作视图的可编辑部分。我有我的尝试领域为h3&amp; h4,将显示log_date,但由于项目是下拉列表,我能得到的最多是选项位置。我一直试图找到get_form_kwargs,看看我是否可以在那里完成它,但它没有点击。
我认为我所学到的关于Django的75%来自StackOverflow,所以我非常感激!
编辑:这就是我的工作方式,添加了一个get_context_data,而我所缺少的是一个自我.get.object.xxx
def get_context_data(self, **kwargs):
context = super(WorklogUpdate, self).get_context_data(**kwargs)
context['project'] = self.get_object().project
context['log_date'] = self.get_object().log_date
return context
感谢您的帮助!
答案 0 :(得分:1)
您希望使用其他信息更新context,而不仅仅是您要返回的表单。
将信息添加到上下文中,然后在您的页面上,您将在视图中显示{{ log }}
和{{ project }}
。