我正在构建一个 Django 站点。我需要为许多不同的产品类别建模,例如电视、笔记本电脑、女装、男鞋等。
由于不同的产品类别具有不同的产品属性,因此每个类别都有自己独立的型号:TV、Laptop、WomensApparel、MensShoes, etc.
我为每个模型创建了一个 ModelForm。因此我有 TVForm、LaptopForm、WomensApparelForm、MensShoesForm 等
用户可以通过多级下拉框选择产品类别来输入产品详情。一旦用户选择了产品类别,我需要显示相应的产品表单。
最明显的方法是使用一个巨大的 if-elif 结构:
# category is the product category selected by the user
if category == "TV":
form = TVForm()
elif category == "Laptop":
form = LaptopForm()
elif category == "WomensApparel":
form = WomensApparelForm()
...
不幸的是,可能有数百个类别。所以上面的方法将是容易出错和繁琐的。
有什么方法可以使用变量 category 的值直接选择和初始化适当的 ModelForm 而无需求助于巨大的 if-elif声明?
类似于:
# This doesn't work
model_form_name = category + "Form"
form = model_form_name()
有什么办法吗?
请您参考如下方法:
如果您所有的*Form 类都在一个模块中(我们称它为forms),您可以这样做:
import forms
form = getattr(forms, category + "Form")()
(显然,添加任何必要的验证,例如捕获 AttributeError。安全方面,如果您使用的是命名模块而不是全局命名空间,那么有人会更难注入(inject)一个新的 *Form 类。)
