python - 从 dict 生成 django 2.0 模型

标签 python django django-models django-2.0

考虑以下 Django 模型:

class Person(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

我想从“静态”字典定义此类(具体来说,在我的情况下,它是从不会更改的文件生成的 - 因此不需要 makemigrations迁移与第一次不同)

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

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

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

最佳答案

这只是开始。请注意,您必须更改函数内的 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 非常期望)

关于python - 从 dict 生成 django 2.0 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49938586/

相关文章:

javascript - 我正在将一个列表从 python 传递到 Flask 中的 JavaScript,我希望输出作为 JavaScript 中的对象

python - 将数据框 reshape 为多索引

python - F2py 无法编译带有私有(private)​​函数的模块

python - Django 模型继承 - 只需要查询中的父类实例

Django 自定义模板标签和模板加载器

django - Django 中的唯一模型字段和区分大小写 (postgres)

python - Django中的通用一对一关系

django - 如何仅将自定义权限与 syncdb 同步?

python - 使用字典列表更新 SQL 表

python - Django:在哪里放置全局模型?