Django rest framework не фиксирует данные в sqlite3 через POST, пока сервер не перезапустится
[CLOSED]Я только начал изучать django rest framework и столкнулся с проблемой. Вот мой код (views.py, urls.py, models.py, serializers.py):
#view.py:
class AllData(viewsets.ModelViewSet):
queryset = Run.objects.all()
serializer_class = RunSerializer
def get_queryset(self):
queryset = self.queryset
start_date = self.request.query_params.get('start_date')
end_date = self.request.query_params.get('end_date')
if start_date is not None and end_date is not None:
queryset = queryset.filter(Q(date__gte=start_date) & Q(date__lte=end_date))
return queryset
#serializers.py:
class RunSerializer(serializers.ModelSerializer):
class Meta:
model = Run
fields = '__all__'
#models.py:
class Run(models.Model):
date = models.DateField()
distance = models.DecimalField(max_digits=5, decimal_places=3)
time = models.SmallIntegerField()
def __str__(self):
return str(self.distance)
#urls.py:
router = DefaultRouter()
router.register('all_runs', AllData, basename='all_runs')
urlpatterns = [
path('average_data/', AverageData.as_view(), name='average_data'),
]
urlpatterns += router.urls
Итак, я начал с http://127.0.0.1:8000/all_runs/ и это работает. http://127.0.0.1:8000/all_runs/1 или что-то другое - тоже. (я уже добавил некоторые данные). Я вижу опции POST, DELETE и т.д. в веб-интерфейсе drf. Но... если я добавляю данные через POST:
- i see "POST /all_runs/ HTTP/1.1" 201 9187 - seems like OK.
- try to http://127.0.0.1:8000/all_runs/ again... and don't see added data!
- restart server (django by default, sqlite3, etc.) and... see added data! Seems like POST works, but i see data after re-starting server only in web-interface of drf. Same problems with Postman. Please, help. What is wrong in my code or common settings of django or something else? Thank you in advance!
p.s. есть дополнительный url к "среднему". я пропустил такой просмотр - это не по моей части.
UPD: получил совет и удалил .all() из queryset в классе и поместил его в return. было: queryset = Run.objects.all() + return queryset стало: queryset = Run.objects + return queryser.all() И теперь все работает!
Попробуйте заменить: queryset = self.queryset
на queryset = super().get_queryset()
. Это заставит заново оценить набор запросов.