django - class 在 ChoiceField 中
django - class in ChoiceField
是否有任何选项可以做这样的事情:
- 我有一个 class:
class HumanModel():
def __init__(self, name=None):
self.name = name
...
class OtherHumanModel():
def __init__(self, name=None):
self.name = name
...
等等
我有一个表格:
class SelectForm(forms.Form):
selection = forms.ChoiceField(
choices=[
(HumanModel, 'Human'),
(OtherHumanModel, 'Other Human')
]
)
在我看来:
def MyView(request):
if request.method == "GET":
form = SelectForm()
return render(request, 'some-html', {
"form": form
})
if request.method == "POST":
data = request.POST['selection']
#make a instance?
return render(...)
例如,在数据中是 HumanModel,但在 unicode 中
有没有可能制作这个模型的实例?
对象=数据(名称="John")???
您可以为此使用工厂模式。在选择中使用 HumanModel.__name__
来引用 class 的名称,而不是在工厂中使用该名称来创建 class.
的具体实例
class SelectForm(forms.Form):
selection = forms.ChoiceField(
choices=[
(HumanModel.__name__, 'Human'),
(OtherHumanModel.__name__, 'Other Human')
]
)
class HumanModelFactory(object):
def __init__(self, model_name):
if model_name == "HumanModel":
return HumanModel()
if model_name == "OtherHumanModel":
return OtherHumanModel()
# usage
model_name = request.POST['selection'] # e.g. 'HumanModel'
instance = HumanModelFactory(model_name)
是否有任何选项可以做这样的事情: - 我有一个 class:
class HumanModel():
def __init__(self, name=None):
self.name = name
...
class OtherHumanModel():
def __init__(self, name=None):
self.name = name
...
等等
我有一个表格:
class SelectForm(forms.Form):
selection = forms.ChoiceField(
choices=[
(HumanModel, 'Human'),
(OtherHumanModel, 'Other Human')
]
)
在我看来:
def MyView(request):
if request.method == "GET":
form = SelectForm()
return render(request, 'some-html', {
"form": form
})
if request.method == "POST":
data = request.POST['selection']
#make a instance?
return render(...)
例如,在数据中是 HumanModel,但在 unicode 中 有没有可能制作这个模型的实例? 对象=数据(名称="John")???
您可以为此使用工厂模式。在选择中使用 HumanModel.__name__
来引用 class 的名称,而不是在工厂中使用该名称来创建 class.
class SelectForm(forms.Form):
selection = forms.ChoiceField(
choices=[
(HumanModel.__name__, 'Human'),
(OtherHumanModel.__name__, 'Other Human')
]
)
class HumanModelFactory(object):
def __init__(self, model_name):
if model_name == "HumanModel":
return HumanModel()
if model_name == "OtherHumanModel":
return OtherHumanModel()
# usage
model_name = request.POST['selection'] # e.g. 'HumanModel'
instance = HumanModelFactory(model_name)