Как зписать данные в ManyToManyField в Django?

Пишу код по учету средств измерений. При перемещении манометра необходимо обновить объект монтажа. Подскажите как внести изменения в location = models.ManyToManyField выбронного средства измерения, который получаю методом POST из формы.

models.py

class Si(models.Model):
    name_si = models.CharField(max_length=100, verbose_name="Наименование СИ")
    location = models.ManyToManyField('Location', verbose_name="Место монтажа")

class Location(models.Model):
    shop = models.ForeignKey('Shop', on_delete=models.PROTECT, verbose_name="Цех", null=True)
    field = models.ForeignKey('Field', on_delete=models.PROTECT, verbose_name="Месторождение", null=True)
    object = models.ForeignKey('Object', on_delete=models.PROTECT, verbose_name="Объект", null=True)

forms.py

class UpdateLocationForm(forms.Form):
    location = forms.ModelChoiceField(queryset=Location.objects.all(), label="Место монтажа", empty_label="Выбери объект")

views.py

def device(request, device_id):
    if request.method =="POST":
        form = UpdateLocationForm(request.POST)
        if form.is_valid():
            print(form.cleaned_data)
            Si.objects.filter(pk=device_id)

*.html

<div>
        <button class="show-dialog-button" type="button">Изменить место монтажа</button>
    </div>

        <dialog class="dialog-box">
          <form action="" method="POST">
               {% csrf_token %}
                {{ form.as_p }}
              <p><button type="submit"> Изменить </button> </p>
          </form>

        </dialog>

Можно сделать так

from .models import Si

def device(request, device_id):
    if request.method == "POST":
        form = UpdateLocationForm(request.POST)
        if form.is_valid():
            location_selected = form.cleaned_data['location']
            si_obj = Si.objects.get(pk=device_id)
        
        # Очищаем предыдущие значения места монтажа для СИ
        si_obj.location.clear()
        # Добавляем новое значение места монтажа
        si_obj.location.add(location_selected)

        # Сохраняем изменения
        si_obj.save()
        # Дополнительная логика / рендеринг шаблона

Отлично. Спасибо! Все оказывается так просто.

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