我有10个基于Django类的视图,我想将它们显示给用户只读。
我希望整个表单是只读的,而不仅仅是一些值。提交表单应该在客户机上禁用(HTML),在服务器上禁用第二次表单(不允许发布)。
有MixIn或其他简单解决方案吗?
发布于 2016-04-28 19:28:37
这里有一个混合器,它可以做两件简单的事情:
disabled和readonly格式的所有字段设置html属性。form_valid方法,这样就不会发生模型保存;相反,将呈现模板(就像没有提交的数据一样)。这样,如果用户提交了表单,则不会导致任何操作。如果要在模板中呈现完整窗体,表单字段错误可能会出现在禁用字段旁边;通过删除表单的错误字典或单独呈现每个字段而没有错误来解决此问题。
from django.views.generic.edit import FormMixin, ModelFormMixin
class ReadOnlyModelFormMixin(ModelFormMixin):
def get_form(self, form_class=None):
form = super(ReadOnlyModelFormMixin, self).get_form()
for field in form.fields:
# Set html attributes as needed for all fields
form.fields[field].widget.attrs['readonly'] = 'readonly'
form.fields[field].widget.attrs['disabled'] = 'disabled'
return form
def form_valid(self, form):
"""
Called when form is submitted and form.is_valid()
"""
return self.form_invalid(form)为非模型FormView扩展这个概念非常简单;而是从类FormMixin继承。:)
发布于 2016-05-12 09:17:04
若要对基于类的视图一般不允许POST请求,可以使用以下混合内容:
class DisallowPostMixin(object):
def post(self, request, *args, **kwargs):
return self.http_method_not_allowed(self, request, *args, **kwargs)如果还想禁用某些表单字段等,可以从Ian的答案中添加get_form方法。
发布于 2016-05-14 20:14:50
您可以通过中间件来破解它。在请求时-检查视图名称和请求方法(如果是后重定向的话),在响应上-在response.content中添加输入吸引。但混合最佳解决方案。
https://stackoverflow.com/questions/36923085
复制相似问题