Проблема с добавлением данных в Many To Many Django

Я хочу добавить данные в Many To Many. Переменная api_data получает данные из API. Я начинаю их обрабатывать. Вместо set я также пробовал add. Ничего не помогает. Я не знаю, что не так

def write_add_serv_to_stations() -> None:
    stations_arr = []
    for data in api_data:
        additional_ids = data['serviceIds'].split(',') if data['serviceIds'] else [85]
        for additional_id in additional_ids
                services = Services.objects.filter(id=1)
                additional = Additional.objects.filter(id__in=[additional_id])
                station = Stations.objects.filter(station_id=data['id'])
                stations = Stations(service=station.service.set(services),
                                    additional=station.additional.set(additional))
                stations_arr.append(stations)
    Stations.objects.bulk_update(stations_arr)

Выходит ошибка

Traceback (most recent call last):
  File "C:\Users\Ramil\AppData\Local\Programs\Python\Python310\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
  File "D:\Work\Django_work\Locator\projects\locator\parsing.py", line 88, in write_add_serv_to_stations
    stations = Stations(service=station.service.set(services),
  File "D:\Work\Django_work\Locator\projects\venv\lib\site-packages\django\db\models\base.py", line 582, in __init__
    _setattr(self, prop, value)
  File "D:\Work\Django_work\Locator\projects\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 606, in __set__
    raise TypeError(
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use service.set() instead.

Я разобрал все возможное и невозможное, не могу понять в чем ошибка. Вот модели

class Services(models.Model):
    id = models.PositiveIntegerField(primary_key=True, verbose_name='id')
    name = models.CharField(max_length=50, verbose_name="Название")

    class Meta:
        verbose_name_plural = "Типы топлива"


class Additional(models.Model):
    id = models.PositiveIntegerField(primary_key=True)
    name = models.CharField(max_length=100, verbose_name='Дополнительные услуги')


class Stations(models.Model):
    service = models.ManyToManyField(Services, verbose_name='Название топлива', null=True, blank=True)
    additional = models.ManyToManyField(Additional, verbose_name='Услуги', null=True, blank=True)

Помогите пожалуйста с проблемой!

Вы должны сначала создать экземпляр Station, а затем добавить поля "многие ко многим" внутри экземпляра.

stations_arr = []
for additional_id in additional_ids:
    ....
    services = Services.objects.filter(id=1)
    additional = Additional.objects.filter(id__in=[additional_id])
    stations = Stations.objects.get(id=id)
    stations.service.add(services)
    stations.additional.add(additional)
    station.save()

Я не пробовал это в вашем коде, но это должно помочь вам начать решение.

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