Setattr не сохраняет значения моего класса в сценарии Python

Я работаю над проектом, который должен сохранить в базе данных значения, предоставленные в json.

Функция setattr не работает, когда я пытаюсь сохранить значения каждого json-концепта в базе данных.

Я думаю, что я правильно указал атрибуты функции.

Это мой models.py:

class Balance_sheet(models.Model):
    company_name = models.CharField(max_length=140)
    year = models.CharField(max_length=140)
    quarter = models.CharField(max_length=140)
    CashAndCashEquivalentsAtCarryingValue =  models.IntegerField(null=True, blank=True)
    ... #Extra fields
 
    class Meta:
        ordering = ['year']
        verbose_name = "Balance Sheet"
        verbose_name_plural = "Balance Sheets" 


    def get_attribute_by_name(self, field):
        if hasattr(self,field):
            return getattr(self,field)
        else:
            return ''


    def set_attribute_by_name(self, field, value):
        if hasattr(self, field):
            return setattr(self, field, value)
        else:
            return ''


    def __str__(self):
        return "%s %s" % (self.company_name, self.year)

Это мой script.py:

from types import SimpleNamespace
from typing import AsyncGenerator
    

from django.core.management.base import BaseCommand, CommandError

from database.models import Balance_sheet


class Command(BaseCommand):

    def handle(self, *args, **options):
        # importing data from json
        data =  open('database/static/data/data-q1.json') 
        jsonObjectQ1 = json.load(data)
        json_prettyQ1 = json.dumps(jsonObjectQ1, sort_keys=True, indent=4)
        data.close()

        x = json.loads(json_prettyQ1, object_hook=lambda d: SimpleNamespace(**d))
        print(x.startDate, x.companyName, x.companyCIK)

        print(x.year)

        # Creating Objects
      
        balance_sheet = Balance_sheet.objects.create(company_name=x.companyName, year=x.year, quarter=x.quarter)


        #Reading data

        for data in x.data.bs:
            concept = data.concept
            value = data.value
            fields = Balance_sheet._meta.get_fields()

            for field in fields:   #checking if field exists
                if concept == field.name:
                    model_name = field.name        
                    setattr(balance_sheet, model_name, value)  #problem
                    balance_sheet.save

Я тоже пробовал со следующим кодом, поэтому его def включили в models.py:

for field in fields:
                if concept == field.name:
                    model_name = field.name        
                    balance_sheet.set_attribute_by_name(model_name, value)
                    balance_sheet.save
                    print(" FILE SAVED")
Вернуться на верх