Как установить dict key в качестве имени динамического поля для добавления значения m2m-полям в Django
Я хочу динамически устанавливать имя поля m2m из ключа словаря, чтобы не вводить каждое имя поля отдельно. Любая помощь будет очень признательна.
instance = ProductAttributes.objects.create(device_type=1, manufacturer=2, created_by=request.user)
device_dict = {
'watch_series': WatchSeries.objects.get(series=mergedict['watch_series']),
'watch_size': WatchSize.objects.get(size=mergedict['watch_size']),
'color': Color.objects.get(id=mergedict['color']),
'band_color': BandColor.objects.get(color=mergedict['band_color']),
'watch_connectivity': 1 if mergedict['is_gps'] == True else 2
}
Вот как я пытаюсь добавить имя поля m2m после экземпляра
for key, val in device_dict.items():
instance._meta.get_field(key).add(val)
Я получаю эту ошибку:
AttributeError: 'ManyToManyField' object has no attribute 'add'
Вам не нужно получать поле из Meta
, вы можете получить к нему доступ непосредственно на экземпляре:
for key, val in device_dict.items():
getattr(instance, key).add(val)