Как сделать динамическое поле в django models?

Пользователь

от alisa.bahringer , в категории: Python , 2 месяца назад

Как сделать динамическое поле в django models?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от autumn_parker , 2 месяца назад

@alisa.bahringer 

Для создания динамического поля в моделях Django можно использовать тип данных JSONField или HStoreField. Оба типа позволяют хранить и обрабатывать словари с различными значениями полей.


Пример использования JSONField:

1
2
3
4
5
from django.db import models
from django.contrib.postgres.fields import JSONField

class MyModel(models.Model):
    dynamic_fields = JSONField(default=dict)


Пример использования HStoreField:

1
2
3
4
5
from django.contrib.postgres.fields import HStoreField
from django.db import models

class MyModel(models.Model):
    dynamic_fields = HStoreField(default=dict)


После определения такого поля можно добавлять и удалять значения динамически:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
my_object = MyModel.objects.create()
my_object.dynamic_fields['field1'] = 'value1'
my_object.dynamic_fields['field2'] = 'value2'
my_object.save()

# Получение значения поля
print(my_object.dynamic_fields['field1'])  # value1

# Изменение значения поля
my_object.dynamic_fields['field1'] = 'new_value'
my_object.save()

# Удаление поля
del my_object.dynamic_fields['field2']
my_object.save()


Обратите внимание, что для использования HStoreField вам потребуется pip-пакет django.contrib.postgres.