首页 文章

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

提问于
浏览
0

好的,我的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和h4,并且将显示log_date,但由于项目是下拉列表,因此我能获得的最多是选项位置 . 我一直试图找到get_form_kwargs看看我是否能在那里完成它,但它没有点击 .

我认为我所学到的关于Django的75%来自StackOverflow,所以我非常感激!

编辑:这就是我使它工作的方式,添加了一个get_context_data,而我缺少的一点是self.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 回答

  • 1

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

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

相关问题