Сохранение значений в модель django через цикл for

Я хочу использовать словарь для хранения значений в модели через модельную форму и представление. Сегодня я решил эту задачу следующим образом:

form.variable_1 = dictionary['variable_1']
form.variable_2 = dictionary['variable_2']
form.variable_3 = dictionary['variable_3']
form.variable_4 = dictionary['variable_4']
form.variable_5 = dictionary['variable_5']
form.variable_6 = dictionary['variable_6']

Ключи в словаре идентичны именам полей для значений, которые я хочу сохранить. Я хотел бы сделать функцию немного более питонической - что-то вроде этого:

for field in form: 
    form.field = dictionary['field']

Однако я не уверен, как использовать Django ORM для достижения этой цели. Поля, которые я хочу итерировать, имеют номера 3-28 в списке полей, поэтому я предполагаю, что мне придется как-то нарезать поля и создать список на основе этого?

редактирование:

models.py

class MyModel(Model):
user = ForeignKey(settings.AUTH_USER_MODEL, on_delete=CASCADE)
Instance_name = CharField(max_length=200, default='')
Instance_text = TextField(default='')
variable_1 = IntegerField(null=True)

Всего 30 переменных, таких как переменная 1, следующая за ней.

forms.py:

class MyModelMF(ModelForm):
class Meta:
    model = MyModel
    fields = [
        'Instance_name',
        'Instance_text'
    ]

    widgets = {
        'Instance_text': Textarea(attrs={"style": "height:4em;" "width:25em;"})
    }

views.py (до начала итерации, для простоты исключен return render etc)

def create_instance(request):
form = MyModelMF()
if request.method == 'POST':
    form = MyModelMF(request.POST)
    if form.is_valid()
        form = form.save(commit=False)
        form.user = request.user
        form.variable_1 = scores_dict['variable_1']

Вы можете использовать встроенную функцию setattr для установки атрибута вашего экземпляра по имени. Переберите ключи и значения в дикте и используйте ключи в качестве имен атрибутов при вызове setattr

if form.is_valid()
    form = form.save(commit=False)
    form.user = request.user
    for field_name, value in scores_dict.items():
        setattr(form, field_name, value)
    form.save()
Вернуться на верх