ChoiceField的Django班

2024-04-23 07:43:15 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有选择这样做: -我有一门课:

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中是 有没有可能做这个模型的实例? 对象=数据(name=“John”)???你知道吗


Tags: nameselfformnoneifinitrequestdef
1条回答
网友
1楼 · 发布于 2024-04-23 07:43:15

你可以用工厂模式来做这个。使用HumanModel.__name__在选择中引用类的名称,而不是在工厂中使用名称来创建类的具体实例。你知道吗

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)

相关问题 更多 >