पर मैपिंग सीरियलाइज़र फ़ील्ड मैपिंगो डीजीगो रेस्ट फ्रेमवर्क प्रोजेक्ट से निपट रहा हूं और मेरे दृश्य के लिए सामान्य प्रतिक्रिया यह नहीं है कि ऐप क्लाइंट की अपेक्षा क्या है।Django Rest Framework - डेटाबेस कॉलम नाम
ऐप क्लाइंट उम्मीद करता है कि संबंधित मॉडल का दायर डेटाबेस के रूप में दिखाई देता है। उदाहरण दिया गया: मॉडल सिटी में देश मॉडल के लिए एक विदेशी कुंजी है, जो देश_आईडी कॉलम द्वारा दर्शायी जाती है।
क्या धारावाहिक डिफ़ॉल्ट फ़ील्ड को "कस्टम" करने के लिए कोई विकल्प है? मैंने Django Rest Framework दस्तावेज़ीकरण की जांच की है लेकिन मुझे केवल "serializer_field_mapping" मिला है, लेकिन मुझे नहीं पता कि यह मेरी आवश्यकताओं के अनुरूप होगा या नहीं, मुझे यह भी नहीं पता कि इसका उपयोग कैसे किया जाए।
किसी भी तरह से मुझे इसका नज़दीक दृष्टिकोण मिला, लेकिन केवल डेटा लाने के मामले में - क्रिएटिंग/अपडेटिंग ने कुछ त्रुटियों को फेंक दिया जो मुझे प्रबंधित नहीं किया गया था। :(
मैं अपने मॉडल.py फ़ाइल, साथ ही वास्तविक आउटपुट और वांछित आउटपुट संलग्न करता हूं। साथ ही, यदि यह संभव है, तो मैं डेटाबेस कॉलम के साथ संयुक्त मौजूद होने पर देश/क्षेत्र से संबंधित डेटा पुनर्प्राप्त करना चाहता हूं FIELD_ID नाम।
अग्रिम धन्यवाद,
models.py
from django.db import models
from django.contrib.postgres.fields import ArrayField
class Country(models.Model):
name = models.CharField(max_length=150, unique=True, blank=False)
class Meta:
db_table = 'countries'
class Region(models.Model):
name = models.CharField(max_length=150, unique=True, blank=False)
code = models.CharField(max_length=150, blank=True)
class Meta:
db_table = 'regions'
class City(models.Model):
country = models.ForeignKey(Country)
region = models.ForeignKey(Region, null=True, blank=True, default=None)
name = models.CharField(max_length=150, unique=True, blank=False)
postal_codes = ArrayField(models.CharField(max_length=12, blank=True), null=True, blank=True, default=None)
def __str__(self):
if not self.region:
return '%s (%s)' % (self.name, self.country.name)
return '%s, %s (%s)' % (self.name, self.region.name, self.country.name)
class Meta:
db_table = 'cities'
वास्तविक कहां tput:
[
{
"id": 1,
"name": "San Francisco",
"postal_codes": null,
"country": 1,
"region": 1
},
{
"id": 2,
"name": "Palo Alto",
"postal_codes": null,
"country": 1,
"region": 1
},
{
"id": 3,
"name": "New York City",
"postal_codes": null,
"country": 1,
"region": 2
},
{
"id": 4,
"name": "London",
"postal_codes": null,
"country": 2,
"region": null
}
]
वांछित आउटपुट:
[
{
"id": 1,
"country_id": 1,
"region_id": 1,
"name": "San Francisco",
"postal_codes": null
},
{
"id": 2,
"country_id": 1,
"region_id": 1,
"name": "Palo Alto",
"postal_codes": null
},
{
"id": 3,
"country_id": 1,
"region_id": 2,
"name": "New York City",
"postal_codes": null
},
{
"id": 4,
"country_id": 2,
"region_id": null,
"name": "London",
"postal_codes": null
}
]
यह ओपी प्रतीत नहीं होता है, क्योंकि वह 'country_id' और' region_id' में आईडी करना चाहती है 'source', की जरूरत है। –
निश्चित रूप से, लेकिन यह कुछ django आराम फ्रेमवर्क डिफ़ॉल्ट सत्यापन प्रदान नहीं करेगा। 'POST/cities/{name: San José, country_id: 999999}' 'ईटीग्रिटी एरर/सिटी/डालने या अपडेट पर अपडेट' के साथ एक HTML प्रदान करेगा "शहरों" विदेशी कुंजी बाधा का उल्लंघन करता है "cities_country_id_2cc874aa51973821_fk_countries_id" विवरण: कुंजी (country_id) = (99 9) तालिका "देशों" में मौजूद नहीं है। 'और डेटाबेस तालिका की बाधाओं के साथ भी ऐसा ही होगा। – jordimarinvalle
@ JordiMarínValle उपयोग ['PrimaryKeyRelatedField'] (http: //www.django-rest-framework।'इंटीजरफ़िल्ल्ड' के बजाय संगठन/एपीआई-गाइड/रिलेशनशिप/# प्राथमिककीसंबंधित क्षेत्र)। –