मैं अपना "पता" एपीआई डिफ़ॉल्ट मान (खाली स्ट्रिंग "") वापस करने की कोशिश कर रहा हूं, लेकिन जब मैं धारावाहिक क्षेत्र में डिफ़ॉल्ट = "" का उपयोग करता हूं तो यह इसके बजाय शून्य हो जाता है। यह मेरा मुख्य धारावाहिक है (LocationSerializer)
class LocationSerializer(serializers.ModelSerializer):
id = serializers.UUIDField(read_only=True)
business_id = serializers.PKRelatedField(Business.any.all(), "business")
city_id = serializers.UUIDField(required=True)
name = serializers.CharField(max_length=48, required=True)
tax_number = serializers.CharField(max_length=48)
phone = serializers.PhoneNumberField()
address = serializers.CharField()
address_details = AddressEmbeddedSerializer(default="", source="addresses")
footer = serializers.CharField()
is_active = serializers.BooleanField(required=True)
has_kds = serializers.BooleanField(read_only=True)
position = serializers.PointField()
image = serializers.ImageField()
# profile = LocationProfileSerializer()
permissions = PermissionSerializer(many=True, read_only=True)
payment_methods = PaymentMethodEmbeddedSerializer(many=True, read_only=True)
class Meta:
model = Location
fields = (
"id", "business_id", "city_id", "name", "tax_number", "phone", "address", "address_details", "footer",
"is_active", "has_kds", "position", "image", "permissions", "payment_methods"
)
और यह मेरा नेस्टेड धारावाहिक है (AddressEmbeddedSerializer)
class AddressEmbeddedSerializer(serializers.ModelSerializer):
city = serializers.CharField(default="")
area = serializers.CharField(default="")
block = serializers.CharField(default="")
avenue = serializers.CharField(default="")
long = serializers.CharField(default="")
lat = serializers.CharField(default="")
class Meta:
model = LocationAddress
fields = (
"city", "area", "block", "avenue", "long", "lat"
)
मैं जिस मूल्य की उम्मीद कर रहा हूं वह है:
"address_details": {
"city": "",
"area": "",
"block": "",
"avenue": "",
"long": "",
"lat": ""
}
इसके बजाय मुझे जो मिल रहा है वह है:
"address_details": null
कृपया ध्यान दें कि सभी CRUD संचालन काम कर रहे हैं, यह केवल एक डिफ़ॉल्ट मान समस्या है
2 जवाब
"address_details": null
का कारण यह है कि वर्तमान ऑब्जेक्ट का मॉडल ऑब्जेक्ट पर कोई संबंधित addresses
नहीं है, इसलिए नेस्टेड सीरिएलाइज़र का उपयोग नहीं किया जाएगा और इसलिए आपका वांछित JSON आउटपुट उत्पन्न नहीं होगा।
साथ ही, default
का उपयोग तब किया जाता है जब POST
अनुरोध के साथ फ़ील्ड के लिए कोई मान प्रदान नहीं किया जाता है GET
मेरा सुझाव है कि आप address_details
को null
होने पर संभाल लें, लेकिन अगर आपको वास्तव में ऐसा करने की ज़रूरत है तो आप to_representation()
या to_internal_value()
पर कुछ कर सकते हैं, यह उत्तर देखें: https://stackoverflow.com/a/38606711/4984493
साथ ही, आप SerializerMethodField
का इस्तेमाल कर सकते हैं, इसलिए obj.addresses
के मान के आधार पर यदि यह null
था या नहीं, तो आप वांछित JSON आउटपुट वापस नहीं कर सकते।
आपको many=True
< देना होगा /strong> नेस्टेड रिश्तों में झंडा
class LocationSerializer(serializers.ModelSerializer):
...
address = serializers.CharField()
address_details = AddressEmbeddedSerializer(source="addresses", many=True, read_only=True)
...
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
django
Django एक ओपन-सोर्स सर्वर-साइड वेब एप्लीकेशन फ्रेमवर्क है जिसे पायथन में लिखा गया है। यह कम कोड, विशेष-अतिरेक पर विशेष ध्यान देने और निहित से अधिक स्पष्ट होने के साथ जटिल डेटा-संचालित वेबसाइटों और वेब एप्लिकेशन बनाने के लिए आवश्यक प्रयास को कम करने के लिए डिज़ाइन किया गया है।
address_details
से आपका क्या मतलब है जब यह शून्य है?address_details
शून्य हो तो आप खाली स्ट्रिंग के साथ डिफ़ॉल्ट मान लौटाते हैं