2016-01-04 3 views
0

Возможно обновление поля с помощью первичного ключа?Django-rest-framework обновить внешний ключ от id

Serialzer:

class HuntingDetailViewSerializer(serializers.ModelSerializer): 

    species = HuntingSpeciesSerializer(many=True, read_only=True) 
    technique = HuntingTechniqueTagSerializer() 

    class Meta: 
     model = HuntListing 
     exclude = ('owner',) 

Просмотров:

listing_id = request.data.get('listing_id') 
    listing = HuntListing.objects.get(id=listing_id) 

    serializer = HuntingDetailViewSerializer(listing, data=request.data, partial=True) 

    if serializer.is_valid(): 
     serializer.save() 

Образец данных:

{"listing_id":9, "technique":1, ....} 

Но я получил:

{'technique': {u'non_field_errors': [u'Invalid data. Expected a dictionary, but got int.']}} 

Если обновление переписан и изменить этот параметр, чтобы technique_id, я не могу видеть это в проверенных данных:

def update(self, instance, validated_data): 
    print(validated_data) 

ответ

2

Проблема с technique = HuntingTechniqueTagSerializer(). Это создает вложенный сериализатор, и поэтому, когда вы пытаетесь обновить модель, он ожидает вложенный словарь. Если вы просто удалите эту строку, она должна работать. Однако, если вы хотите вложенное представление, вам придется создавать отдельные сериализаторы чтения/записи.

+0

Спасибо! Теперь я полностью понимаю –