我想基于抽象模型创建许多模型,但字段的默认值不同。
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
上述方法有哪些缺点?还有更好的办法吗?
答案 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'