Django UpdateView,其中一些字段只是文本

时间:2014-02-12 19:10:44

标签: django

好的,我的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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您希望使用其他信息更新context,而不仅仅是您要返回的表单。

将信息添加到上下文中,然后在您的页面上,您将在视图中显示{{ log }}{{ project }}