我想使用下面的基本模型,允许我们的团队在需要时使用自定义属性(即prefix
、length
和字段的field_name
)将unique_reference
字段添加到各种模型中。你知道吗
有没有一个干净和愉快的方式来实现我所期待的Django?你知道吗
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()
我想说一种可能的方法是在所有模型上规范化unique_reference
字段的名称。你知道吗
但这是次优的,因为它需要大量重构,而且在某些情况下语义上是不正确的。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐