Несколько представлений одного и того же экземпляра в DRF

Я использую DRF, чтобы сделать доступными некоторые наборы данных из моего бэкенда Django (2.2.24) и использовать Listfield-Serializer, чтобы показать их через мой API в виде списка. qualificatonIds - это поле "многие ко многим" в модели, которое связывает topic экземпляр с некоторыми qualification экземплярами и наоборот.

Serializer:

class TopicListField(serializers.ListField):
    id = serializers.PrimaryKeyRelatedField(source='pk', read_only=True)
    code = serializers.CharField(source='category.code', read_only=True)
    qualificationIds = serializers.PrimaryKeyRelatedField(source='qualifications', many=True, default=[], read_only=True)
    equipmentIds = serializers.PrimaryKeyRelatedField(source='equipments', many=True, default=[], read_only=True)
    miscEquipment = serializers.CharField(source='misc_equipment', read_only=True)

Мой выход - список, включающий два разных экземпляра одной и той же записи базы данных с разными первичными ключами. Ожидаемый результат - список с одним экземпляром, в котором два разных первичных ключа хранятся в одном списке. Как я могу хранить их в одном экземпляре?

Выход:

"topics": [
  {
    "id": 17,
    "code": "AAK",
    "qualificationIds": [
        35
    ],
    "equipmentIds": [
         7
    ],
    "miscEquipment": ""
  },
  {
    "id": 17,
    "code": "AAK",
    "qualificationIds": [
        35
    ],
    "equipmentIds": [
         6
    ],
    "miscEquipment": ""
  }
]

Ожидаемый выход:

"topics": [
  {
    "id": 17,
    "code": "AAK",
    "qualificationIds": [
        35
    ],
    "equipmentIds": [
         6
         7
    ],
    "miscEquipment": ""
  }
]

Конкретная модель-часть:

class QualificationMixin(models.Model):

    # noinspection PyUnresolvedReferences
    qualifications = models.ManyToManyField(
        'Topic',
        db_index=True,
        verbose_name='Voraussetzungen (Kurse)',
        related_name='%(class)s_list',
        blank=True,
        help_text="Welche Kurseinhalte müssen von den Teilnahmern für den Kurs beherrscht werden",
    )
Вернуться на верх