Как использовать сериализатор остальной структуры django, чтобы заполнить обратную связь в отображении m2m? - PullRequest
0 голосов
/ 25 апреля 2020

Вот что у меня есть

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?

...