Допустим, у нас есть следующая модель:
class Classroom(models.Model):
room_number = [....]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
Предположим, что вместо получения результата, подобного этому, для функции ManyRelatedPrimaryKeyField:
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
вернуть что-то, что включает в себя полное представление связанной модели, например:
{
"room_number": "42",
"teachers": [
{
'id':'27,
'name':'John',
'tenure':True
},
{
'id':'24,
'name':'Sally',
'tenure':False
},
]
},
Это возможно? Если так, то как? И это плохая идея?
depth
не следует делать то, что вам нужно в этом случае, а также объяснить исключение, которое вы видите, и как с ним бороться.many=True
как так...TeacherSerializer(source='teacher_set', many=True)
. В противном случае я получил следующую ошибку:The serializer field might be named incorrectly and not match any attribute or key on the 'RelatedManager' instance. Original exception text was: 'RelatedManager' object has no attribute 'type'.
..._set
по умолчанию. См. Документацию Django для получения более подробной информации: docs.djangoproject.com/en/1.10/ref/models/relations/…Спасибо @TomChristie !!! Вы мне очень помогли! Я хотел бы обновить это немного (из-за ошибки, с которой я столкнулся)
источник
Это также может быть достигнуто с помощью довольно удобного dandy django, упакованного под названием drf-flex-fields . Мы используем это, и это довольно здорово. Вы просто устанавливаете его
pip install drf-flex-fields
, пропускаете через сериализатор, добавляетеexpandable_fields
и бинго (пример ниже). Это также позволяет вам указывать глубокие вложенные отношения с помощью точечной нотации.Затем вы добавляете
?expand=teacher_set
в свой URL, и он возвращает расширенный ответ. Надеюсь, это когда-нибудь поможет. Ура!источник