从字典生成 Django 2.0 模型
generate django 2.0 model from a dict
考虑以下 Django 模型:
class Person(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
我想从“静态”字典定义这个class(具体来说,在我的例子中,它是从一个不会改变的文件生成的——所以不需要makemigrations
和 migrate
除了第一次).
下面是一些伪代码,可以更好地解释我想要实现的目标:
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 ) To be brief, it lets Django to know which module your class belongs to, it uses it mostly to display various messages to it's user, see here: https://github.com/django/django/search?utf8=%E2%9C%93&q=module&type=
(只需将它设置为你的 models.py 就像上面的例子一样,因此 Django 非常期待)
考虑以下 Django 模型:
class Person(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
我想从“静态”字典定义这个class(具体来说,在我的例子中,它是从一个不会改变的文件生成的——所以不需要makemigrations
和 migrate
除了第一次).
下面是一些伪代码,可以更好地解释我想要实现的目标:
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 ) To be brief, it lets Django to know which module your class belongs to, it uses it mostly to display various messages to it's user, see here: https://github.com/django/django/search?utf8=%E2%9C%93&q=module&type=
(只需将它设置为你的 models.py 就像上面的例子一样,因此 Django 非常期待)