Всем добрый день.
Имеется модель в models.py:
class Event(models.Model):
id = models.AutoField(primary_key=True)
date_time = models.DateTimeField()
source = models.CharField(max_length=300)
destination = models.CharField(max_length=300)
status = models.CharField(max_length=30)
comment = models.CharField(max_length=300)
Соответственно serializer:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('id', 'date_time', 'source', 'destination', 'status', 'comment')
И view во views.py:
class EventViewSet(viewsets.ModelViewSet):
"""
Event
"""
queryset = Event.objects.all()
serializer_class = EventSerializer
В urls.py:
router = routers.DefaultRouter()
router.register(r'events/?', views.EventViewSet)
urlpatterns = [
url(r'^api/', include(router.urls)),
...
]
Мне необходимо сделать изменение некоторых полей для нескольких объектов данной модели из выборки по некоторым параметрам.
Т.е. SQL запрос:
UPDATE server_event SET source='some src' WHERE status='in work';
Как я понял, это можно сделать примерно так:
Event.objects.filter(status=in work').update(source='some src')
Вопрос в том: где и когда это вызывать и как передавать то что хочу изменить и то, что должно быть в WHERE.
@detail_route(methods=['put'])
def change_action(self, request):
return Response({'status': 'successful'})
Но первая проблема:
Я ожидал что к этой функции будет доступ по url: /api/events/change_action/
Но получается другой: /api/events/pk/change_action/
Как это изменить?
Как лучше передавать поля для where? в QUERY_STRING?
т.е. /api/events/change_action?status=in+work
А то, что я хочу имзенить в body?
Updated 4 Sept. 2015, 13:03 by AnDrOiD73.