gpt4 book ai didi

python - Django 中的动态表单要求

转载 作者:太空狗 更新时间:2023-10-30 03:07:57 24 4
gpt4 key购买 nike

我即将在工作中启动一个大型 Django 项目。关键功能是表单处理。该应用程序的用户将使用很多表单。一个要求是应该可以在应用程序的管理界面中编辑表单。

即不要求增删表单域。但应该可以编辑表单字段属性。例如,更改哪些字段是必需的等等。

任何人都有关于如何执行此操作的任何好的解决方案。我在想我可能必须将我想要动态的字段子类化并在那里做一些事情。我想所有的模型字段都必须有“blank=True/null=True”以及一些如何在单独的模型中添加一些元信息(?)关于声明哪些字段是必需的模型。然后在显示和验证表单时使用该信息。

在我开始这样做之前,我真的很想知道如何设计这样一个解决方案,有人知道应该如何完成吗?


经过更多研究,我了解到您可以使用工厂函数做很多事情,这些函数会返回具有给定属性集的表单。所以看起来问题并不难解决。

我会创建一个函数,返回一个具有正确属性/字段集的表单。但是我还没有找到好的解决方案的部分是如何在管理界面中管理它。我在想我会制作一个 db.Model 来存储有关其他模型字段的信息。我可以在哪里设置哪些是必需的等等。

然后在返回表单的函数中,遍历该模型并返回具有正确属性的表单。但是如何以良好的方式制作该模型(它应该反射(reflect)另一个模型的字段)?

最佳答案

您应该为此使用某些模型。对于可能以这种方式定制的每个表单,都必须创建一个新的数据库条目。我想,它应该是这样的:

class FormSettings(Model):
form = CharField(..)

class FormAttrib(Model):
form_settings = ForeignKey(FormSettings)
field = CharField(..)
attrib_name=CharField(..)
attrib_value=CharField(..)

在 FormSettings.form 中,您应该存储一些表单地址,例如 .并且在构建表单时(在 init 中),它应该在 db 中查找条目并使用为其描述的属性。

如果在创建类时为表单使用自己的元类并使其在数据库中注册(创建适当的 FormSettings 条目),则可以轻松创建数据库条目。它会在流程启动时完成一次,这应该不会那么糟糕。

希望对大家有所帮助。如果您还有其他问题,我很乐意提供帮助 :-) 我喜欢 django 的那些非标准设备 :-) 这就是所有乐趣的开始 :-)

编辑:

好吧,比方说,您想要应用食物并使用 food_name 字段形成 FavouriteFoodForm。您将数据库中的 formsettings 表存储为 food.FavouriteFoodForm 并添加一个属性设置:field='food_name', attrib_name='required', attribute_value='True'(它并不完美,但也不是那么糟糕')。

在 FavouriteFoddForm 中没有你在数据库中查找设置,所以你这样做:

settings = FormSettings.objects.get(form=app_name + self.__class__.name)

然后你遍历设置

for setting in settings.formattrib_set():

在这里你可以简单地调用 exec 并设置适当的属性:

exec("getattr(self, settings.field)[attrib_name] = %s" % attrib_value)

这应该将属性设置为 required=True。

关于python - Django 中的动态表单要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2229427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com