Здравствуйте, я использую django с базой данных postgre, и в моей базе данных у меня есть 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|
Не могли бы вы мне помочь, пожалуйста ?
Большое спасибо !
Всего 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)
для заполнения таблицы ExtractData существующими данными в таблице MainModel используйте этот код только один раз:
for main in MainModel.object.all():
ExtractData.create(name=main.data__name,city=main.data__city)
после первоначального заполнения таблицы DataExtract, теперь вы должны использовать сигнал для вставки в таблицу DataExtract после каждой вставки в таблицу MainModel, например:
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)