Установка дополнительных полей в 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 в представлении и вручную создать метки.