3
def resume_edit(request, r_id):

    r = Resume.get.object(pk=r_id)
    resume = ResumeModelForm(instance=r)

    resume.fields['email'].widget.attrs['readonly'] = True 

    return render(request, 'resumes/resume.html', context)

我试图这样做但它不起作用,我知道如何在 Forms.py 中做到这一点,但我想知道它是否可能?

我正在使用 Django 2.0

4

1 回答 1

6

是的,从开始,一个字段有一个.disabled可以设置为的属性True

所以我们可以使用:

def resume_edit(request, r_id):
    r = Resume.get.object(pk=r_id)
    resume = ResumeModelForm(instance=r)

    resume.fields['email'].disabled = True 

    return render(request, 'resumes/resume.html', context)

这不仅会确保相应表单部分的 HTML 被禁用,而且还会在您发布时忽略可能的更改Form(请注意,您当然首先需要禁用该字段)。

由于render(..)调用会生成 HTML,因此该字段当然应该在呈现、验证或'd之前进行更改。.save()

.disabled属性通常比 usingreadonly等更好。因为某些表单元素具有在 HTML 级别禁用元素的特殊方法(有些则使用disabled)。此外,如前所述,它不仅在 HTML 级别禁用表单元素。如果用户想要发布恶意值,那么表单将简单地忽略这些值。

于 2018-06-10T15:59:21.487 回答