Организовать выборку только из кэша (обращение к базе данных не допускается)

Django==4.0.5 django-cachalot==2.5.1

Модель:

class General_Paragraph(models.Model):
    treaty = models.ForeignKey('treaties.Treaty',
                               on_delete=models.PROTECT,
                               db_index=True)
    identifier = models.CharField(max_length=100,
                                  blank=False,
                                  null=False,
                                  db_index=True,
                                  unique=True)

Денежный разогрев:

@admin.action(description='Warm cache up')
def warm_up(modeladmin, request, queryset):

    MODELS_AND_APPS = {
        ...
        "General_Paragraph": "paragraphs_of_treaties",
        ...
    }

    for model_name in MODELS_AND_APPS:
        current_model = apps.get_model(app_label=MODELS_AND_APPS[model_name], model_name=model_name)
        all_instances = current_model.objects.all()
        list(all_instances) # The very warming the cache up.   

Проблемный код:

def get_texts_in_languages(treaty, paragraph_identifier, party):
    general_paragraph = General_Paragraph.objects.get(treaty=treaty,                                                      identifier=paragraph_identifier)

SQL:

SELECT ••• FROM "paragraphs_of_treaties_general_paragraph" WHERE ("paragraphs_of_treaties_general_paragraph"."identifier" = 'Par 1' AND "paragraphs_of_treaties_general_paragraph"."treaty_id" = 1) LIMIT 21

Что мне нужно Я использую Memcached. Поскольку это чтение, я не хочу никакого чтения из базы данных. Все должно запрашиваться из кэша. Насколько я понял, .objects.get(treaty=treaty, identifier=paragraph_identifier) не будет покрываться Django Cachalot.

Помогите, пожалуйста, написать код, который не будет бить по базе данных. Возможны любые разогревы кэша. У меня достаточно ресурсов на хостинге.

Моя проблема в том, что я не могу понять, что делать: возможен ли здесь какой-то элегантный запрос или мне придется перебирать весь кэш?

Вернуться на верх