Вот что у меня есть
class Component(models.Model):
risks = models.ManyToManyField(Risk)
...
class Risk(models.Model):
label = models.TextField()
...
class RiskSerializer(serializers.HyperlinkedModelSerializer):
severity = serializers.SlugRelatedField(queryset=Severity.objects.all(), slug_field='label')
class Meta:
model = Risk
fields = [
'id',
'label',
'severity',
...
]
def create(self, validated_data):
print('foo', validated_data)
instance = super().create(validated_data)
if self.context.get('component_id'):
component = Component.objects.get(id=self.context.get('component_id'))
component.risks.add(instance)
return instance
Что я пытаюсь сделать sh - я пытаюсь создать новый риск с использованием сериализатора для существующего компонента. Вот так:
risk = RiskSerializer(data={
'label': 'foo bar'
...
}, context={'component_id': component.id})
risk.is_valid()
risk = risk.save()
Идея состоит в том, что если я смогу передать component_id, я мог бы переопределить метод create, чтобы каким-то образом найти и объект компонента, создать его, а затем добавить его к нему.
Как правильно заполнить поле риска компонента m2m?