Для сброса кэша DRF GenericAPIView после срабатывания post_save сигнала можно использовать следующий подход:
1. Импортируйте необходимые модули:
```python
from django.core.cache import cache
from django.db.models.signals import post_save
from django.dispatch import receiver
```
2. Найдите ключи кэша, связанные с вьюхой GenericAPIView, например, используя его URL или другой уникальный идентификатор. Например:
```python
def get_cache_keys():
keys = []
# Получение ключей кэша связанных с GenericAPIView
# ...
return keys
```
3. Создайте функцию-обработчик сигнала post_save, которая будет удалять найденные ключи кэша:
```python
@receiver(post_save, sender=YourModel)
def clear_cache_on_post_save(sender, instance, **kwargs):
cache_keys = get_cache_keys()
# Удаление найденных ключей кэша
cache.delete_many(cache_keys)
```
4. Убедитесь, что функция-обработчик сигнала зарегистрирована приложении Django. Например, добавьте следующую строку в файле `apps.py` вашего приложения:
```python
from django.apps import AppConfig
class YourAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'your_app_name'
def ready(self):
import your_app_name.signals # Замените на путь к файлу со сигналом
```
5. Убедитесь, что файл `apps.py` вашего приложения зарегистрирован в файле `settings.py` проекта. Например, добавьте `'your_app_name.apps.YourAppConfig'` в `INSTALLED_APPS`.
Что касается вопроса о том, почему кэш вьюхи не удаляется, хотя `cache.delete_many` возвращает количество удаленных ключей, возможно, есть несколько причин:
- Проверьте правильность создания и регистрации сигнала `post_save`.
- Убедитесь, что функция-обработчик сигнала вызывается при сохранении модели.
- Проверьте корректность ключей кэша, которые возвращаются из функции `get_cache_keys`. Убедитесь, что ключи соответствуют ключам, которые используются при сохранении данных в Memcached или другом кэше.