可以在Django项目的View.py中禁用字段吗?

时间:2018-06-10 15:56:15

标签: python django

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

1 个答案:

答案 0 :(得分:2)

是的,自documentation起,某个字段的属性可设置为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,因此在呈现,验证或.save()之前,该字段当然应该被更改。

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