从dict生成django 2.0模型

时间:2018-04-20 09:37:13

标签: python django django-models django-2.0

考虑以下Django模型:

makemigrations

我想从“静态”dict 定义这个类(具体来说,在我的情况下,它是从一个不会改变的文件生成的 - 所以不需要migrate和{{1除了第一次)

这是一些伪代码,可以更好地解释我想要实现的目标:

persondict = {‘first_name‘: models.CharField(max_length=255), ‘last_name’: models.CharField(max_length=255)}

class Person(models.Model):
    #generate fields from persondict    

1 个答案:

答案 0 :(得分:1)

这只是一开始。请注意,您必须更改函数内的app_label,如果您在models.py中使用它来定义它,那么您将使用它,否则您将需要用适当的值替换'__module__'。

def generate_person_model_from_a_dict(person_model_dict):

    class Meta:
        app_label = 'your_app_label_here'

    person_model_dict.update({
        'Meta': Meta,
        '__module__': generate_person_model_from_a_dict.__module__,
    })

    Person = type("Person", (models.Model,), person_model_dict)
    return Person
这里需要

Meta.app_label让Django知道应该将新构建的模型连接到哪个应用程序,例如如果你是为应用blog创建它并将模型的app_label设置为blog,那么Django会知道应用程序上有这个模型(就像你定义它一样)在您的blog/models.py

__module__是python对象的一个​​特殊属性(你可以在这里阅读它的详细信息https://docs.python.org/3/reference/datamodel.html)简而言之,它让Django知道你的类属于哪个模块,它主要使用它来向用户显示各种消息,请参见此处:https://github.com/django/django/search?utf8=%E2%9C%93&q=module&type= (只需将它设置为您的models.py,就像上面的例子中Django非常期待的那样)