首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ChoiceField中的django类

ChoiceField中的django类
EN

Stack Overflow用户
提问于 2015-09-08 10:05:57
回答 1查看 78关注 0票数 0

有没有办法做这样的事:-我有一门课:

代码语言:javascript
复制
class HumanModel():
    def __init__(self, name=None):
        self.name = name
...

class OtherHumanModel():
    def __init__(self, name=None):
        self.name = name
...

等。

我有一张表格

代码语言:javascript
复制
class SelectForm(forms.Form):
selection = forms.ChoiceField(
    choices=[
        (HumanModel, 'Human'),
        (OtherHumanModel, 'Other Human')
    ]
)

我认为:

代码语言:javascript
复制
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中有可能生成这个模型的实例吗?object =data(name=“John”)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 11:06:03

你可以用工厂模式来处理这个问题。使用HumanModel.__name__引用所选内容中的类名,而不是使用工厂中的名称来创建类的具体实例。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32454895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档