Я бьюсь головой об стену об этом вот уже 3 полных дня и, наверное, читаю каждую ветку по SO.Предупреждение = Я не очень хорошо разбираюсь в Django REST или Python.
Подводя итог, можно сказать, что в каждом профиле пользователя есть 11 футболистов, которых они изначально выбрали.Теперь я хочу обновить / изменить этих игроков с помощью POSTing json info.
views.py
elif request.method == 'POST':
jsondata = dict(request.data)
profile = Profile.objects.get(user=request.user)
serializer = ProfileSerializer(profile, data=jsondata, partial=True)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
Serializers.py
class ProfileSerializer(serializers.ModelSerializer):
"""
Serializing all the Players
"""
#user = serializers.StringRelatedField()
GK1 = PlayerSerializer()
DF1 = PlayerSerializer()
DF2 = PlayerSerializer()
DF3 = PlayerSerializer()
DF4 = PlayerSerializer()
MF1 = PlayerSerializer()
MF2 = PlayerSerializer()
MF3 = PlayerSerializer()
MF4 = PlayerSerializer()
FW1 = PlayerSerializer()
FW2 = PlayerSerializer()
def create(self, validated_data):
return Profile.objects.create(**validated_data)
class Meta:
model = Profile
fields = ( "GK1", "DF1", "DF2", "DF3", "DF4", "MF1", "MF2", "MF3", "MF4", "MF5", "FW1", "FW2",)
Прямо сейчас в качестве теста я пытаюсь просто обновить GK1.Я знаю, что я получаю правильные данные JSON через POST.Я также знаю, что данные экземпляра являются исходными данными.Однако это просто не будет сохранять / обновлять !!!Я переопределил метод обновления как тест:
def update(self, instance, validated_data):
setattr(instance, "GK1.id", validated_data['GK1']['id'])
instance.save()
return instance
### set the id of GK1 to the id that arrives via POST
### GK1.id gives me '1008' - a Player object
### validated_data['GK1']['id'] gives me '1025' - id of another player
Ничего не происходит - идентификатор не изменяется в БД: (
Вот мой главный вопрос -
validated_dataтакое экземпляр OrderedDict (штраф)
является объектом профиля пользователя.
Как втиснуть данные OrderedDict в объект профиля? Могу ли я сделать это просто путем ссылки на первичный внешний ключ? Т.е.id?
Я очень сожалею о том, насколько это расплывчато и, возможно, об отсутствии кода. Но учебник по DRF не ясен, imho. Любая помощь очень ценится.
EDIT -json data / validated_data добавлен в комментарии
EDIT2 - у меня есть рабочее решение Я изменил метод обновления, чтобы сделать следующее для каждого игрока: instance.GK1 = PlayerID.objects.get (id = validated_data ['GK1']. pop ('id'))
Или, другими словами, экземпляр искал ОБЪЕКТЫ игрока (а не строковое представление идентификатора). ПоэтомуЯ выдал идентификатор и отфильтровал (или .get) поидентификатор объекта.
Спасибо за чтение, у меня с плеч огромный вес ...