Ho un genitore e un modello figlio correlato uno a uno e vorrei rendere i campi dal piano del bambino nella rappresentazione genitore (read only
). Attualmente, l'ho raggiunto con un'implementazione personalizzata to_representation
ma sembra molto coinvolgente e mi chiedo se non ci sia un modo più semplice per raggiungere questo obiettivo.Il quadro di riposo di Django rappresenta l'oggetto nidificato di appiattimento
È reso più complicato dal fatto che il mio modello correlato è collegato tramite una proprietà.
Così qui è l'esempio concreto: Per impostazione predefinita un oggetto correlato sarebbe resa come:
{
parent_name:'Bob',
child:{
name:'Alice'
}
}
Questo è quello che voglio e attualmente ottenere con la mia to_representation
:
{
parent_name:'Bob',
child_name:'Alice'
}
I miei modelli assomiglia a questo:
class ChildModel(models.Model):
name = models.CharField(max_length=100, null=True)
class ParentModel(models.Model):
name = models.CharField(max_length=100, null=True)
_child = models.ForeignKey('ChildModel', null=True)
@property
def child(self):
return self._most_recent_status
@name.setter
def child(self, value):
self._child = value
Qui sono i miei serializzatori:
class FlatChildField(serializers.RelatedField):
def to_representation(self, value):
return value.name
class FlatParentSerializer(serializers.ModelSerializer):
parent_name = serializers.CharField(source='name', read_only=True)
child_name = FlatChildField(source='_child', read_only=True)
class Meta:
model = Parent
fields = ('name', 'child_name')
Per una soluzione più semplice per ottenere una rappresentazione piatta di modelli correlati, sarei grato.
Per completezza, sarei interessato a sapere se esiste una soluzione più semplice per i modelli correlati "normali" (vale a dire non anche i campi del modello di proprietà). Stavo cercando l'equivalente della sintassi della query del modello django di related_model__field
, ma non riesco a trovarlo. Esiste per la struttura del riposo django?
Molte grazie
Funziona molto, grazie. –
Funziona anche senza read_only, il che è ottimo per appiattire i modelli annidati! – alekwisnia