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!