【问题标题】:How can I create a subclass using django?如何使用 django 创建子类?
【发布时间】:2019-05-13 14:45:39
【问题描述】:

您好,我正在使用带有 postgre 数据库的 django,在我的数据库中,我有 5 列,其中一列称为:“数据”,在数据中有:

|data |
|{"name":"Peter","city":"New York"}|
|{"name":"Denis","city":"Paris"}|
|{"name":"Jennifer","city":"San Francisco"}|
|{"name":"Kim","city":"Berlin"}|

我想提取此列并创建一个名为 dataExtract 的子表,例如:

|name|city|
|Peter|New York|
|Denis|Paris|
|Jennifer|San Francisco|
|Kim|Berlin|

你能帮帮我吗?

非常感谢!

【问题讨论】:

  • 为什么你认为你需要一个子类或一个“子表”呢?您实际上想用提取的数据做什么
  • 其实是因为查询很慢……有了这个substable会更快。
  • subclass/subtable(尤其是在 postgres 的情况下)是非常具体的术语。您想要的只是 another 模型,another 表(我想是 FK)。
  • 您是否只是在寻找relationship 的概念?

标签: python django python-3.x postgresql django-models


【解决方案1】:

创建一个新模型:

class DataExtract(Base):
    main = models.OneToOneField(
        MainModel,
        on_delete=models.CASCADE,
        primary_key=True,
    )
    name = models.CharField(default=None, max_length=400, blank=True)
    city = models.CharField(default=None, max_length=400, blank=True)

要使用 MainModel 表中的现有数据填充 ExtractData 表,只需使用此代码一次:

for main in MainModel.object.all():
    ExtractData.create(name=main.data__name,city=main.data__city)

在初始填充 DataExtract 表后,现在您必须在每次插入 MainModel 表后使用信号插入 DataExtract 表,如下所示:

class DataExtract(Base):
    ......
    ......

    @receiver(post_save, sender=MainModel)
        def create_data_extract(sender, instance, created, **kwargs):
            # you have to check here for duplicate, 
            # if there is no duplicate, create it.
            # if there is duplicate update that
            ExtractData.create(name=instance.data__name,city=instance.data__city)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2019-09-16
    • 2016-10-20
    相关资源
    最近更新 更多