2015-09-21 33 views
5

Sadece django ve DRF ile çalışmaya başladım ve DRF önbellek yanıtlarına benzeyen bir sorunla karşılaşıyorum. Demek istediğim - nesneyi değiştirebilir, yeni oluşturabilir veya silebilirim - ve DRF yanıtı tutar, hiçbir şey değişmez. Örneğin, bir nesne oluşturuyorum ancak modelViewSet hala bu nesnenin sunulmadığı verileri döndürüyor. Ama eğer doğrudan bir nesneyi talep edersem - bunun yaratıldığını gösterir. Ve başka herhangi bir eylem ile. DRF'de önbellekleme ile ilgili bir konu bulamıyorum ve django kasırgaları yokmuş gibi görünmüyorum, bu yüzden neler olduğuna dair hiçbir fikrim yok. Sadece bir şey yardımcı olur - sunucuyu yeniden başlat (varsayılan dev sunucusunu kullanıyorum).Django REST Framework önbellekleme nasıl devre dışı bırakılır?

Bir şey daha - DRF görünümleri değil, django görünümleri tarafından oluşturulduğunda tüm veriler tamamdır.

Kullanmakta olduğum serileştiricilerden/modelViewSet'lerden bir tanesi. Mümkün olduğu kadar basit. Ve ayrıca - django önbellek backends kullanmıyorum. En azından - benim ayarlarımda yok.

class WorkOperationSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = WorkOperation 


class WorkOperationAPIView(viewsets.ModelViewSet): 
    serializer_class = WorkOperationSerializer 
    queryset = WorkOperation.objects.all() 

    def get_queryset(self): 
     return self.queryset 
+0

DRF'de böyle bir şey yok, DRM tarafında önbelleğe alma işleminin gerçekleştiğinden emin misiniz? Belki de bu önbelleği veya tarayıcıda bulunan django'da başka bir şey var mı? – GwynBleidD

+0

Eh, bu bir tarayıcı değil görünüyor - diğer insanlar da aynı sonuçları görür. Ve dediğim gibi - önbellekleme yok. Django, önbelleğe almak için middleware kullanıyor, değil mi? – GeraldIstar

+0

Bu önbellekten etkilenen görüntü ve seri hale getirici ekleyebilir, ayrıca django projesinde hangi önbellek arka uçlarını kullanıyorsunuz? – GwynBleidD

cevap

4

Sen QuerySet önbelleğe alma django hakkında here okuyabilir. En iyi tavsiye şu şekilde gözüküyor: taze sonuç almak için .all() yöntemini tekrar çalıştırın. Sadece object.property, önbelleğe alınmış sonuçları verebilir.

+0

Ah, utanıyor bana. Teşekkür ederim, sadece 'work.peration.objects.all()' 'self.queryset' iadesiyle kullanılmalıdır. Dikkatsizliğim. – GeraldIstar

İlgili konular