2016-04-06 4 views
0

Mit Django Rastrahmen passieren habe ich zwei Serializer definiert:Wie Objekt-ID aus Angularjs Django Ruhe Rahmen

class ServiceSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ServiceType 
     fields = '__all__' 

class CompanyShortListSerializer(serializers.ModelSerializer): 

    services = ServiceSerializer(many=True) 

    class Meta: 
     model = Company 
     fields = ('id','name', 'address', 'cost_per_patient', 'cost_per_month', 'renting_fee', 'services') 

Wo das Servicetype-Modell aus drei Feldern besteht:

class ServiceType(models.Model): 
    serviceName = EncryptedCharField(max_length=100, blank=True) 
    servicePrice = EncryptedFloatField(null=True, blank=True) 
    company = models.ForeignKey(Company, related_name = 'services') 

Nein Ich muss das Firmenmodell erwähnen, da es hier nicht wichtig ist.

Unter Verwendung von Angular Ich möchte Firmen auf den neuesten Stand bringen, indem Sie z. Entfernen eines bestimmten Dienstes von einem definierten Unternehmen.

Die Daten in meinem $ http.PUT für Dienste, sieht wie folgt aus:

services:Array[3] 
    0:Object 
     $$hashKey:"object:26" 
     company:49 
     id:67 
     serviceName:"Terapia" 
     servicePrice:100 
     __proto__:Object 
    *ommitting the others for brevity* 

usw.

Bitte beachten Sie, dass die ID in diesem Objekt gesendet wird. Jedoch wenn ich versuche, dies zu tun:

def update(self, instance, validated_data): 
    # Updates and exisitng Company with several services 
    instance.name = validated_data['name'] 
    instance.address = validated_data['address'] 
    instance.cost_per_patient = validated_data['cost_per_patient'] 
    instance.renting_fee = validated_data['renting_fee'] 

    # create or update page instances that are in the request 
    for service in validated_data['services']: 
     updatedService = ServiceType(id=service['id'], serviceName = service['serviceName'], servicePrice = service['servicePrice'], company=instance) 
     updatedService.save() 

    return instance 

Die Linie id=service['id'] einen Fehler, da service schafft nicht das ID-Feld enthält. Was diese Funktion erhält, ist auf bestellt Wörterbuch wie folgt aus:

[ 
OrderedDict([(u'serviceName', u'Terapia'), (u'servicePrice', 100.0), (u'company ', <Company: Test 1>)]), 
OrderedDict([(u'serviceName', u'Terapia par'), (u'servicePrice', 150.0), (u'company', <Company: Test 1>)]), 
OrderedDict([(u'serviceName ', u'Terapia po angielsku'), (u'servicePrice', 120.0), (u'company', <Company: Test 1>)]) 
] 

Was falsch ist - warum ist die ID nicht an den Serializer übergeben und wie das zu beheben? Vielen Dank im Voraus für Ihre Hilfe!

Antwort

0

Nachdem ich diesen Punkt sorgfältig analysiert habe, habe ich eine neue Frage über das Serialisierer- und ID-Feld gestellt, die here zu sehen ist, die ich letztendlich lösen konnte :) Ufff!

Verwandte Themen