自动为Django模型字段创建布尔双胞胎字段

我有很多领域的模型。对于大量的这些字段(例如大约20个字段),但并非所有字段我都希望自动创建一个双BooleanField

一些要求:

  • 字段的类型不同(例如CharFieldDateField,...)
  • 将来会添加新字段,这就是为什么我要创建此通用解决方案的原因,所以我只需添加主字段并将其标记为添加双胞胎
  • 理想情况下,我希望能够使用相同的ORM语法进行过滤,例如,如果我手动定义了布尔双胞胎
  • 大多数时候只需要字段本身,很少是布尔双胞胎

给出以下模型

from django.db.models import model

class MyModel(models.Model):
    ignore_field = models.Charfield(max_length=10)
    my_field = models.Charfield(max_length=30)

我想自动添加字段:

    is_fixed_my_field = models.BooleanField(default=False)

我所考虑的:

1。 composite-fields

我看到的这种方法的问题是,我将需要为每种字段类型手动定义这样的复合字段,而且我不确定是否可以传递kwargs。另外,我认为我不能保留查询的默认语法。相反,我必须在每个过滤器中添加此附加级别。

class FixedField(CompositeField):
    value = models.Charfield()  # could I even add the kwargs?
    is_fixed = models.BooleanField()

class MyModel(models.Model):
    ignore_field = models.Charfield(max_length=10)
    my_field = FixedField()

2。 custom fields 我的梦想是创建一个自定义字段,如下所示:

class MyModel(models.Model):
    ignore_field = models.Charfield(max_length=10)
    my_field = FixableField(models.Charfield,max_length=30)

MyModel.objects.filter(is_fixed_my_field=True)
m = MyModel(my_field="foo")
print(m.is_fixed_my_field)  # False

显然,它不适用于类似的东西

class FixableField:
    def __init__(self,model,field_class: models.Field,*args,**kwargs):
        setattr(model,f"is_fixed_{cannot_get_the_field_name}",models.BooleanField)
        field_class(*args,**kwargs)

因为据我所知,该类在迁移生成期间并未真正实例化。

我的梦想有可能吗?

注意1:我在后台使用postgres。

注2:我当前正在使用Django 1.11,但如果解决方案仅适用于更新版本,我也对此感兴趣。

zgxgcgvg 回答:自动为Django模型字段创建布尔双胞胎字段

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3158226.html

大家都在问