首页 > 解决方案 > 如何在仅显示数据时禁用表单的字段,但在使用新表单输入数据时启用

问题描述

我有一个表单,用于以只读格式显示数据,您可以通过单击表中的记录并进入只读详细信息视图来完成此操作。

我还想重用相同的表单作为向表中输入数据的一种方式 - 默认情况下,我为我的只读视图禁用了所有字段,因此想在为我的插入视图生成表单时找到一种方法来覆盖它?

我想如果我将表单包装在模板中的 POST 方法中,它会以某种方式启用这些字段,但似乎不起作用

表格.py

from django import forms

class BusinessDataForm(forms.Form):
    tableName = forms.CharField(strip=True, empty_value='NULL', disabled=True)

视图.py

# Django imports
from django.shortcuts import render
from django.http import HttpResponse

# Local imports
from .forms import BusinessDataForm
from .tables import ResultsTable as rt
import common.dbConnectionManager as dbc

# System imports
import sys
import pyodbc
sys.path.insert(0,'..')
pyodbc.pooling = False


def home(request):
    return render(request, 'home.html')

def db_display(request):
    dbo = dbc.dbConnectionManager()
    query_result_as_dict = dbo.run_query('SELECT TOP 10 DataBaseName, TableName, Version, TableKind, CreatorName FROM DBC.TABLESV;')
    dbo.disconnect()

    table = rt(query_result_as_dict)

    #tables.RequestConfig(request).configure(table)
    return render(request, "db_display.html", {"table" : table})

def business_data_display(request, table_name):
    dbo = dbc.dbConnectionManager()
    query_result_as_dict = dbo.run_query('''SELECT DataBaseName, 
                                            TableName,
                                            Version,
                                            TableKind,
                                            CreatorName 
                                            FROM DBC.TABLESV 
                                            where TableName = '{table_name}' '''.format(table_name=table_name))

    form = BusinessDataForm(initial={'tableName' : query_result_as_dict[0]['TableName']})

    return render(request, 'business_data_form.html', {'form' : form})

def business_data_new(request):
    form = BusinessDataForm()
    return render(request, 'business_data_new.html', {'form' : form})

business_data_new.html

{% extends 'base.html' %}
{% block content %}
<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="btn btn-success">Save</button>
</form>
{% endblock %}

到目前为止,无论如何该字段仍然处于禁用状态,有什么想法可以覆盖它吗?当我BusinessDataForm()在我的views.py中实例化时可以完成吗?

标签: pythondjangodjango-forms

解决方案


在将表单传递给模板之前,我设法通过添加以下内容来解决这个问题

form.fields['tableName'].disabled = False


推荐阅读