【问题标题】:DJANGO - class Meta / varibales db_tableDJANGO - 类 Meta / varibales db_table
【发布时间】:2021-02-04 21:07:17
【问题描述】:

我想在我的元类中获取一个变量

    class Meta:
        abstract = True
        db_table = 'bikes_table'
        managed = False

我想像上面一样从self 获取一个变量:

    class Meta:
        abstract = True
        db_table = 'bikes_table' if self.customers=True else 'cars_table'
        managed = False

是否有可能得到变量? 谢谢

【问题讨论】:

  • Meta 无权访问self。它实际上仅用于定义模型的元数据。所以我认为这是不可能的。
  • "self" 在类声明时不存在 - 仅在调用视图时。
  • 我认为你想要的是一个基本模型定义,然后你可以为你的 carsbikes 模型继承它......

标签: django variables meta metaclass


【解决方案1】:

正如 cmets 中所述,表面问题是“self”在类定义时当然不可用。

元数据中的某些字段的值可能会在运行时更改,对于每个实例,这些字段将接受回调函数而不是静态值(但查看文档,似乎没有)

现在,与某个Model对应的表被ORM使用,并将在类级别进行绑定。双重原因是因为许多处理类的查询必须发出数据库语句 没有实例,就像任何查询 的情况一样。我的意思是,在您的示例中,vehicle.objects.all() 必须查询两个数据库表并将结果放在同一个响应中。

可以通过子类化 Django 的内部 Queryset 数据库,并仔细重写它以自定义方式查看“表”模型元数据来完成,但它很容易出错。 p>

因此,您宁愿重新考虑您的设计。简单地拥有一个 Vehicle 基类会更容易,只需在您的表单和关系上使用“Vehicle”,并从中派生 Bicycle 和 Car 类——无论是汽车还是自行车都可以在车辆可以使用的任何地方使用。 Django 通过Generic Relations 为关系本身提供支持

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2013-07-25
    相关资源
    最近更新 更多