Установка дополнительных полей в Django Generic Many to Many Relationship

Интересно, как я могу установить общие отношения "многие ко многим", включая дополнительные поля, через почтовый запрос.

Обратите внимание, что я удалил некоторые неактуальные поля, чтобы было легче читать. Для простоты я включил только один из объектов (сообщение), который может иметь эти метки.

Модели

class Message(models.Model):
    text = models.CharField(max_length=250, default='text')
    labels = GenericRelation(to=Label)

class Tag(models.Model):
    color = serializers.Charfield()
    
class Label(models.Model):
    tag = models.ForeignKey(to=Tag, on_delete=models.CASCADE)

    # Generic foreign key
    object_id = models.PositiveIntegerField()
    content_type = models.ForeignKey(to=ContentType, on_delete=models.CASCADE)
    content_object = GenericForeignKey()

    confidence = models.IntegerField()
    section = models.IntegerField()

    class Meta:
        indexes = [
            models.Index(fields=["content_type", "object_id"]),
        ]

Serializers

class LabelSerializer(ModelSerializer):
    class Meta:
        model = Label
        fields = ['id', 'confidence', 'level']

class MessageSerializer(serializers.ModelSerializer):
    labels = serializers.ManyRelatedField(
        child_relation=LabelSerializer(), required=False)

    class Meta:
        model = Message
        fields = ['id', 'text', 'labels']
        

Идея состоит в том, чтобы сделать следующий пост-запрос к Message api, который установит связь между тегами и сообщениями (а также установит текст сообщения), используя пользовательскую сквозную таблицу Labels с дополнительными полями confidence и section set.

{
 'text': 'Message Text',
 'labels': [
   {
     'tag': 1,
     'confidence': 0.9,
     'section': 1
   },
   {
     'tag': 2,
     'confidence': 0.7,
     'section': 1
   }
  ]
}

Сериализатор работает, однако объект отношения/метки не создается. Можно ли сделать так, чтобы он автоматически создавался как отношение ManyToMany, включая дополнительные поля? Или мне придется переопределить метод create в представлении и вручную создать метки.

Вернуться на верх