मैं usign रहा हूँ Django बाकी फ्रेमवर्क जहाँ मैं निम्नलिखित दो serializers है:Django बाकी फ्रेमवर्क मॉडल क्रमांक क्षेत्र
class ServiceSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = ServiceType
fields = ('id', 'serviceName', 'servicePrice')
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')
ServiceType मॉडल इस तरह दिखता है:
class ServiceType(models.Model):
serviceName = EncryptedCharField(max_length=100, blank=True, verbose_name = "Typ usługi")
servicePrice = EncryptedFloatField(null=True, blank=True, verbose_name = "Cena usługi", validators = [MinValueValidator(0.1), MaxValueValidator(999)])
company = models.ForeignKey(Company, related_name = 'services')
मैं संबंधित सेवाओं को बदलकर मौजूदा उदाहरणों को अपडेट करना चाहते हैं (उदाहरण के लिए उनमें से कुछ को हटा देना)। इस लक्ष्य को पूरा मैं यह कर रहा हूँ: - मैं एक KeyError 'id'
मिलता है जिसका अर्थ है - हालांकि मैं यह स्पष्ट रूप से ServiceSerializer
id
क्षेत्र में जोड़ा समस्या यह है कि मैं का सामना करना पड़ रहा हूँ
def update(self, instance, validated_data):
# Updates an 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']
services_data = validated_data['services']
for item in services_data:
updatedService = ServiceType(
serviceName = item['serviceName'],
servicePrice = item['servicePrice'],
id=item['id'],
company=instance)
updatedService.save()
return instance
कि service['id']
क्षेत्र प्रदान नहीं की है है।
संपादित
यहाँ एक अनुकरणीय अनुरोध (क्रोम से लिया गया) है कि मैं पोस्टिंग कर रहा हूँ है:
{ "id":49,"name":"Test 1",
"address":"Testowa 1",
"renting_fee":200,
"cost_per_month":300,
"cost_per_patient":null,
"services":[
{"id":67,"serviceName":"Terapia","servicePrice":100},
{"id":68,"serviceName":"Terapia par","servicePrice":150},
{"id":69,"serviceName":"Terapia po angielsku","servicePrice":120}
]
}
क्या मैं गलत कर रहा हूँ और कैसे (एक एक वस्तु की आईडी प्राप्त करने मूल रूप से सर्विससेरियलाइज़र) नेस्टेड धारावाहिकों का उपयोग कर?
संपादित करें .2
जब मैं serializer अद्यतन समारोह मैं निम्नलिखित मिल से प्रिंट:
print(self.data['services'])
मुझे देता है:
[
OrderedDict([('id', 67), ('serviceName', u'Terapia'), ('servicePrice', 100.0)]),
OrderedDict([('id', 68), ('serviceName', u'Terapia par'), ('servicePrice', 150.0)]),
OrderedDict([('id', 69), ('serviceName', u'Terapia po angielsku'), ('servicePrice', 120.0)]),
OrderedDict([('id', 70), ('serviceName', u'Terapia grupowa'), ('servicePrice', 140.0)])
]
हालांकि, print(services_data)
निम्नलिखित देता है (मूल रूप से वही, लेकिन आईडी के बिना):
[
OrderedDict([(u'serviceName', u'Terapia'), (u'servicePrice', 100.0)]),
OrderedDict([(u'serviceName', u'Terapia par'), (u'servicePrice', 150.0)]),
OrderedDict([(u'serviceName', u'Terapia po angielsku'), (u'servicePrice', 120.0)])
]
,210
और ids
खो जाना ...
संपादित no.3
Django Rest Framework docs के अनुसार निश्चित क्षेत्र हो जाएगा serializer उत्पादन प्रतिनिधित्व में किया जाएगा यदि यह एक HiddenField
होना चाहिए। हालांकि इसे default
मान की आवश्यकता है ... मैंने इसे चेक किया है और वास्तव में एक डिफ़ॉल्ट मान 'हल' के साथ इस छिपे हुए फ़ील्ड का उपयोग कर रहा है - आईडी मान्य_डेटा में है। समस्या यह है कि id
सही नहीं है। क्या इस id
को धारावाहिक को भेजे गए ऑब्जेक्ट के मान पर सेट करने की संभावना है?
धन्यवाद, आपने मेरा दिन बचाया :-) – bre
आपने अभी एक और जीवन बचाया है! डीआरएफ दस्तावेज़ एक भूलभुलैया है। दस्तावेज़ों में महत्वपूर्ण जानकारी गहरी छिपी हुई है। धन्यवाद – danidee