Ich habe es mit Django Rest Framework-Projekt zu tun und die generische Antwort für meine Ansicht ist nicht das, was der App-Client erwartet.Django Rest Framework - Zuordnung von Serializer-Feldern zu einem Datenbankspaltennamen
Der App-Client erwartet, dass das Feld der verwandten Modelle in der Datenbank angezeigt wird. Beispiel gegeben: Modell Stadt hat einen Fremdschlüssel für das Ländermodell, dargestellt durch eine Spalte country_id.
Gibt es eine Option, um die Standardfelder der Serializer in eine benutzerdefinierte zu "mappen"? Ich habe die Django Rest Framework-Dokumentation überprüft, aber ich habe nur "serializer_field_mapping" gefunden, aber ich weiß nicht, ob es meinen Anforderungen entspricht und ich weiß auch nicht, wie ich es verwenden soll.
Irgendwie habe ich eine enge Annäherung davon, aber nur im Fall für das Abrufen von Daten - creating/update warf einige Fehler, die ich nicht bekommen habe, wie man verwaltet. :(
Darf ich meine models.py Datei anhängen, plus die tatsächliche Ausgabe und die gewünschte Ausgabe. Außerdem, wenn es möglich ist, möchte ich Daten abrufen, die mit Land/Region zusammen mit der Datenbankspalte verknüpft sind field_id Namen.
Vielen Dank im Voraus,
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'
Actual Ou 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
}
]
gewünschte Ausgabe:
[
{
"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
}
]
Es ist nicht OP scheint braucht 'source', da er ids in' country_id' und 'region_id' haben will. –
Sicher, aber es wird nicht einige Django Rest Framework Standardvalidierung bieten. 'POST/cities/{Name: San José, country_id: 999999}' liefert einen HTML-Code mit 'IntegrityError at/cities/Einfügen oder Aktualisieren in Tabelle" cities "verletzt Fremdschlüssel-Constraint" cities_country_id_2cc874aa51973821_fk_countries_id "DETAIL: Schlüssel (country_id) = (999) ist in der Tabelle "countries" nicht vorhanden. "Das gleiche gilt für Einschränkungen der Datenbanktabelle. – jordimarinvalle
@ JordiMarínValle Verwenden Sie ['PrimaryKeyRelatedField'] (http: //www.django-rest-framework.org/api-guide/relations/# primarykeyrelatedfield) anstelle von 'IntegerField'. –