#django #jsonfield
#django #jsonfield
Вопрос:
Я получаю противоречивые результаты в зависимости от серверной базы данных при использовании запросов jsonfield «contains».
from polymorphic.models import PolymorphicModel
import jsonfield
class Action(PolymorphicModel):
new_object = jsonfield.JSONField(null=True)
В другой модели я фильтрую по этому jsonfield, но получаю разные результаты.
На sqlilite работает следующее:
return Action.objects.filter(
new_object__contains={"ref_id": self.id}
).order_by("-created_at")[:5]
В mysql я должен сделать следующее:
return Action.objects.filter(
new_object__contains=f""ref_id": {self.id}"
).order_by("-created_at")[:5]
Итак, мне кажется, что в одной среде он десериализует json в dict, тогда как другой сохраняет его в виде строки..
У кого-нибудь есть хороший способ справиться с этим? Может ли быть проблема с одной из конфигураций, не совпадающих с базой данных?
Редактировать: это Django 2.2
Комментарии:
1. Начиная с Django-3.1, в MySQL он также использует JSONField. В ранних версиях a
JsonField
действительно было в большинстве баз данных просто aVARCHAR
с сериализацией / десериализацией, выполняемой с помощью Django.2. Я вижу, да, я в проекте Django 2.2. Знаете ли вы способ справиться с этим изящно, без необходимости изменять код для каждой среды?