У меня есть родительская и взаимно родственная дочерняя модель, и я хотел бы отображать поля из дочернего объекта в родительском представлении (read only
). В настоящее время я достиг этого с пользовательской реализацией to_representation
, но это кажется очень привлекательным, и мне интересно, нет ли более простого способа достичь этого.Django rest framework представляет собой сглаженный вложенный объект
Это осложняется тем фактом, что моя родственная модель связана через свойство.
Так вот конкретный пример: По умолчанию связанный объект будет обработан следующим образом:
{
parent_name:'Bob',
child:{
name:'Alice'
}
}
Это то, что я хочу, и в настоящее время получить с моей to_representation
:
{
parent_name:'Bob',
child_name:'Alice'
}
Мои модели выглядят следующим образом:
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
Здесь являются моими сериализаторами:
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')
Для более простого решения получить плоское представление связанных моделей я был бы признателен.
Для полноты мне было бы интересно услышать, есть ли более простое решение для «нормальных» связанных моделей (т. Е. Не полей модели свойств). Я искал эквивалент синтаксиса запроса модели django related_model__field
, но я не могу этого найти. Это существует для рамки django rest?
Большое спасибо
Это работает очень, спасибо. –
Это работает также без read_only, что отлично подходит для сглаживания вложенных моделей! – alekwisnia