Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据库中的Django Eval_Python_Django_Eval - Fatal编程技术网

Python 数据库中的Django Eval

Python 数据库中的Django Eval,python,django,eval,Python,Django,Eval,我和我的团队正试图用Django开发一个“非常动态”的web应用程序。 我们为用户提供了一个“配置”模板,每个人都可以在其中配置自己的空间。 每个配置选项都应该从数据库中读取 视图: 在我们的数据库中,我们有如下配置模型表: +----+-----+-----+-----+---------+---------------+ | id |user |Title|Body |OptionBtn| form | +----+-----+-----+-----+---------+-

我和我的团队正试图用Django开发一个“非常动态”的web应用程序。 我们为用户提供了一个“配置”模板,每个人都可以在其中配置自己的空间。 每个配置选项都应该从数据库中读取

视图:

在我们的数据库中,我们有如下
配置
模型表:

+----+-----+-----+-----+---------+---------------+
| id |user |Title|Body |OptionBtn|     form      |
+----+-----+-----+-----+---------+---------------+
| N  |userA|  X  |  X  |    X    | DataConfig()  |
+----+-----+-----+-----+---------+---------------+
| N2 |userA|  X  |  X  |    X    | ColorsConfig()|
+----+-----+-----+-----+---------+---------------+
| N3 |userA|  X  |  X  |    X    |ButtonsConfig()|
+----+-----+-----+-----+---------+---------------+
还有很多我要跳过的专栏

当然,DB的
Form
字段中的每个
Form
值都存在于forms.py
中,并带有各自的名称。 当我尝试在模板中迭代这些表单字段时,问题就出现了(DB中的每一列都正确显示,如按钮、标题、文本等)

以下是模板(我跳过了示例表中的一些属性):

(如果您看到一些属性没有显示在我的示例表中,那只是因为我没有键入所有属性)

它不是正确显示实际表单,而是将
form
DB列的值显示为字符串。例如,对于
表单
列(
DataConfig()
)中的第一个值,它在迭代中将每个字母显示为字符串(首先显示“D”,然后显示“a”,然后显示“t”,等等,直到最后一个“))。
我如何告诉Django它不是字符串值而是变量?

在Django模型
配置中,可以添加一个属性来获取和实例化实际的表单类

例如:

class Configuration(models.Model):
    ...

    def get_form(self):
        # 'forms_module' is the Python module (file) that holds the form classes
        # 'self.form' is a string that holds the name of the form class
        form_class = getattr(forms_module, self.form)

        # create an (un-bound) instance of the form
        return form_class()
然后,在模板中(假设
配置
是模型
配置
的实例),您可以更改此行:

{% for field in configuration.form %}
进入这个

{% for field in configuration.get_form %}
注意:要使其正常工作,您需要在DB字段中存储表单类名,但不带参数(或者在调用
getattr(forms\u module,self.form)
之前删除参数)



如果您需要更具体的信息,您需要在问题中添加更多信息。

谢谢您的回答。我不知道我应该在“forms_module”中输入什么,我试着输入它的表单,但我得到一个错误“NameError at/Config/name'ConfigUser'未定义”(ConfigUser是表单)
forms_module
应该是包含表单定义的python文件。您必须在代码中导入对该python文件的引用;例如,
从您的应用程序导入表单中
我可以实现我在这里尝试的功能,非常感谢!但还有一个问题。我想把这张表格填上数据。我注意到,在模型中的方法中,我可以返回form_类(instance=my_instance),它可以工作,但问题是我需要通过会话变量调用它,模型中不允许它们,只有视图中才允许它们。我如何处理这个问题?
form\u类(instance=my\u instance)
是获取包含数据的表单的正确方法。您从哪里获取
配置的实例?在视图中,您可能正在将其传递给模板。在同一视图中,您可以尝试调用方法
configuration.get_form()
(使用会话数据中的实例)并将绑定的表单传递给模板。
<!-- _______________________Forms iterations__________________________ -->
<form style="display:none" id="frm{{ configuration.codConfi }}" class="breadcrumb form-inline" action="/Config/{{ configuration.codConfi }}" method="POST" enctype="application/x-www-form-urlencoded">{% csrf_token %}
    <div class="form-group col-12" style="color:#228718"><h3>Configure {{ configuration.Title }}</h3></div>
        {% for field in configuration.form %}
            <div class="form-group col-3 m-1">
                <label class="form-group">{{ field.label }}: </label>
                {{ field }}
            </div>
        {% endfor %}
    <button type="submit" class="btn btn-success ml-auto mr-0 mr-md-3 my-2 my-md-4">Apply changes</button>
</form>
{% endfor %}
class Configuration(models.Model):
    ...

    def get_form(self):
        # 'forms_module' is the Python module (file) that holds the form classes
        # 'self.form' is a string that holds the name of the form class
        form_class = getattr(forms_module, self.form)

        # create an (un-bound) instance of the form
        return form_class()
{% for field in configuration.form %}
{% for field in configuration.get_form %}