Django以编程方式操作模型字段

时间:2017-08-23 10:00:23

标签: python django django-models

我想使用以下基本模型,以允许我们的团队使用自定义属性(即unique_referenceprefix和{{}在需要时向各种模型添加length字段1}}该领域)。

是否有一种干净而愉快的方式来实现我正在寻找的Django?

field_name

我想说一种可能的方法是在所有模型上规范化class UniqueFieldModel(models.Model): class Meta: abstract = True def __init__(self, *args, **kwargs): self.prefix = getattr(self.Meta, 'unique_reference_prefix') self.unique_ref_length = getattr(self.Meta, 'unique_reference_field_name', settings.UNIQUE_REFERENCE_MAX_LENGTH) unique_ref_field_name = getattr(self.Meta, 'unique_reference_field_name') unique_reference_field = models.CharField( max_length=self.unique_ref_length, blank=False, null=False ) setattr(self, unique_ref_field_name, unique_reference_field) super(UniqueFieldModel, self).__init__(*args, **kwargs) def save(self, *args, **kwargs): if not self.unique_reference: prefix = getattr(self.Meta, 'unique_reference_prefix') self.unique_reference = \ self.gen_unique_value( prefix, lambda x: get_random_string(x), lambda x: self.objects.filter(unique_reference=x).count(), self.unique_ref_length ).upper() 字段的名称。

但它不是最理想的,因为它需要大量的重构,并且在某些情况下在语义上是不正确的。

0 个答案:

没有答案