Посоны, есть проблема с рест фреймворком. Суть проблемы:
у меня есть модель - Task
, у которой много разных FK-полей. Одно поле - статус - Status
. Я отправляю из ангулара(не суть) в рест-фреймворк измененное состояние объекта. Конкретно - статуса.
И тут происходит магия - оно перетирает поля в самом статусе!
В общем, ща станет понятно, надеюсь :)
Итак, что мы имеем:
Модель:
class Task(models.Model):
...
status = models.ForeignKey('task.Status', default=Status.objects.get(name='NONE'))
...
Такой вот отправляю request
методом "POST"
:
(Вообще, тут полное состояние модели, со всеми nested объектами. Все канонично, как для REST API
. Просто убрал лишнее)
{
"status":{"id":2,"name":"WIP","color":"#FFFF99"}, #ВНИМАНИЕ, id = 2!
"id":1,
........
}
имеем такую вьюху обрабатывающую запрос:
@login_required
def task_list(request):
...
if request.method == 'GET':
...
elif request.method == 'POST' and request.user.is_superuser:
data = JSONParser().parse(request) #парсим запрос
tasks = Task.objects.get(pk = data['id']) #получаем таск, который изменять(update) будем.
serializer = ShotTaskSerializer(tasks, data=data) #отправляем в сериализатор
if serializer.is_valid():
serializer.save() #если ок - сохраняем
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)
и вот тут происходит магия, вот ОТВЕТ с сервера:
{
...
"status": {"id": 1, "name": "WIP", "color": "#FFFF99"}, #а тут клац, и id = 1 !!!!
"id": 3,
....
}
Я как бы понимаю что происходит - оно перетирает значения в самом Status
, а не статус как свойство объекта Task
! И таким образом, получается полный абзац.
Что делать, как подправить? Может где-то я сурово тупанул?
Updated 30 July 2014, 19:27 by wdstrm.