Я создаю чат-бота, используя Django с серверной частью MySQL.
У меня есть модель ChatSession, которая представляет всю полезную информацию, которая будет сохранена после окончания сеанса чата.
Теперь у него есть поле JSON с именем cc_data (реализовано с использованием django-jsonfield)
Вот пример содержимого этого поля:
{
"slots":{
"chal_tech":"What is the Proof",
"nats":["I will fail the course","Nobody likes me"],
"distortion":"Jumping to Conclusions",
"user_name":"parth",
}
}
Недавно я понял, что мне нужно запросить некоторые поля в этом словаре slots. Примером запроса может быть список всех nats за последние 10 сеансов чата.
Кажется, что чтение всех значений JSON в dicts, а затем поиск/манипулирование ими было бы неэффективным. Поэтому я стремился преобразовать это представление JSON в модели Django ORM (SQL).
Однако при попытке сделать это я столкнулся с проблемой. Число "ключей" словаря slots, вероятно, конечно, но я не знаю точно, сколько из них потребуется на данный момент. В любом случае это будет большое количество (около 50-100).
models.py кажется неэффективным, а также немного повторяющимся (большинство из них будет просто иметь один JSONfield или TextField). Даже с абстрактными моделями мне все равно пришлось бы перечислять классы для всех «ключей» в файле models.py.Как мне преобразовать это в действительный правильный дизайн Django ORM/SQL, чтобы запросы были эффективными, а код не повторялся?
Почему вы хотите создать новую модель для нового ключа? Разве не будет достаточно модели с объектом FK, видом (имя слота) и содержимым (что вы предпочитаете, текст или json)?
@awesoon Вот что я думал сделать. Однако есть небольшое предостережение: если содержимое слота — это сам JSON, и мне нужно искать внутри него ключи, то я снова сталкиваюсь с той же проблемой.






Либо выберите Решение Entity-Attribute-Value для Django, либо используйте PostgreSQL и запрос к полю JSON Django.