我想通过一个通用的mixin或抽象模型向现有模型添加新的CharFields,但这些字段的名称取决于configuraton。因此,一个模型将有someprefix1_title字段和另一个模型someprefix2_title。在
是否有可能使这种方法发挥作用:
class AbstractModel(models.Model):
self.fields_prefix + '_title' = models.CharField(max_length=255, blank=True, default='')
class Meta:
abstract = True
class ModelOne(AbstractModel):
fields_prefix = 'someprefix1'
id = models.AutoField(primary_key=True)
class ModelTwo(AbstractModel):
fields_prefix = 'someprefix2'
id = models.AutoField(primary_key=True)
所以ModelOne可以有字段id和someprefix1\u title。在
upd:用add_to_class()进行monkey修补怎么样?它能工作吗?还是它是一个反模式,不应该使用?在
最干净的方法可能是使用
add_to_class()
:尽管如此,这仍然可以被认为是“猴子补丁”的所有缺点,如使应用程序更难维护,代码更难理解等。。。Bu如果您的用例确实需要这样做,那么它可能是最好的解决方案,因为
add_to_class()
是Django本身提供的一些功能,并且已经稳定了相当长一段时间。在尝试使用工厂模式设置
AbstractModel
的不同版本。在使用这种方法,您可以更严格地控制通过工厂函数}的方式。在
dynamic_fieldname_model_factory
修改{我们也不会在}之后修改它们的定义——其他解决方案已经指出这有助于避免可维护性问题。在
ModelOne
或{在模型.py公司名称:
以下是此代码生成的迁移:
^{pr2}$Django模型可以用动态字段名创建。下面是一个简单的Django模型:
下面是使用
^{pr2}$type()
构建的等效类:任何可以以正常方式定义的Django模型都可以使用
type()
生成。在跑m南部有一组可靠的函数,用于处理Django项目的模式和数据库迁移。什么时候? 在开发中,South可以建议迁移,但不尝试自动应用它们
相关问题 更多 >
编程相关推荐