首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于10 Django类视图的只读视图

基于10 Django类视图的只读视图
EN

Stack Overflow用户
提问于 2016-04-28 18:47:13
回答 3查看 1.7K关注 0票数 4

我有10个基于Django类的视图,我想将它们显示给用户只读。

我希望整个表单是只读的,而不仅仅是一些值。提交表单应该在客户机上禁用(HTML),在服务器上禁用第二次表单(不允许发布)。

有MixIn或其他简单解决方案吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-28 19:28:37

这里有一个混合器,它可以做两件简单的事情:

  • disabledreadonly格式的所有字段设置html属性。
  • 重写CBV的form_valid方法,这样就不会发生模型保存;相反,将呈现模板(就像没有提交的数据一样)。这样,如果用户提交了表单,则不会导致任何操作。

如果要在模板中呈现完整窗体,表单字段错误可能会出现在禁用字段旁边;通过删除表单的错误字典或单独呈现每个字段而没有错误来解决此问题。

代码语言:javascript
复制
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继承。:)

票数 9
EN

Stack Overflow用户

发布于 2016-05-12 09:17:04

若要对基于类的视图一般不允许POST请求,可以使用以下混合内容:

代码语言:javascript
复制
class DisallowPostMixin(object):

    def post(self, request, *args, **kwargs):
        return self.http_method_not_allowed(self, request, *args, **kwargs)

如果还想禁用某些表单字段等,可以从Ian的答案中添加get_form方法。

票数 1
EN

Stack Overflow用户

发布于 2016-05-14 20:14:50

您可以通过中间件来破解它。在请求时-检查视图名称和请求方法(如果是后重定向的话),在响应上-在response.content中添加输入吸引。但混合最佳解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36923085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档