在Django中动态创建模型

时间:2016-11-08 12:24:34

标签: python django

我想基于抽象模型创建许多模型,但字段的默认值不同。

def get_model(name):

    class AbstractModel(models.Model):
        field1 = models.CharField(max_length=100, default=name)

        class Meta:
            abstract = True

    return AbstractModel

class MyModel(get_model('MyModel')):
    pass

上述方法有哪些缺点?还有更好的办法吗?

1 个答案:

答案 0 :(得分:1)

看起来你需要一个模型而不是一组模型。您可能只有一个模型,其中一个附加字段具有某种模型类型 - 这与您的模型名称完全相同。

你的想法有很多缺点。主要是这对其他人来说会非常混乱,并且由于不断使用代码反射而对性能产生负面影响。

<强>更新

默认值名称取决于您可以通过在构造函数中覆盖它来创建的类:

from django.db import models


class A(models.Model):
    def __init__(self):
        self.f = 'model A name'
    f = models.CharField(max_length=100)

class B(A):
    def __init__(self):
        self.f = 'model B name'

然后在交互式会话中尝试:

>>> from polls import models
>>> models.A().f
'model A name'
>>> models.B().f
'model B name'