使用for循环保存模型实例的多个字段-Django

时间:2019-12-23 23:12:25

标签: python django sqlite django-models

尝试从Django视图将数据保存到SQLite数据库时遇到问题。一般而言,我的方法如下,它打算将实例填充到循环中并最终保存它。

1)获取数据(字典)
2)实例化模型
循环-In
3)遍历字典以获取键,值对并将其保存到实例中
循环-出
4)保存实例

问题是我在for循环之后得到了一个空实例,而不是一个填充的实例。
现在的代码

models.py

class OptionsHomePage(models.Model):
    option_a = models.IntegerField(choices=MINUTES_OPTIONS) 
    option_b = models.IntegerField(choices=HOURS_OPTIONS) 

    start_time_am_minutes = models.IntegerField(choices=MINUTES_OPTIONS, default=0) 
    start_time_am_hours = models.IntegerField(choices=HOURS_OPTIONS, default=0) 
    end_time_am_minutes = models.IntegerField(choices=MINUTES_OPTIONS, default=0) 
    end_time_am_hours = models.IntegerField(choices=HOURS_OPTIONS, default= 0) 

视图注意:同义词是一本字典,在其中我将来自前端的数据映射到模型中它们各自的值

...
        options = OptionsHomePage()
        data_to_fill = request.GET.get('data_to_fill')
        data_to_fill = json.loads(data_to_fill)
        for k, v in synonyms.items():
                try:
                    # print(data_to_fill[k])
                    data_name = synonyms[k]
                    value = data_to_fill[k]
                    options.data_name = value
                    print('{} - {} '.format(data_name,data_to_fill[k]))
                except Exception as e:
                    print(e)
        print(options)
        options.save() 
...

那里的打印语句,只是为了查看那里发生的事情,给了我以下内容:

end_time_pm_minutes - 10
delay_seconds - 11
screen_of_option - off
------------------------------
OptionsHomePage object (None)
------------------------------

好吧,谢谢!如果没有很好地解释或显示某些内容,请告诉我,我可以详细说明!

1 个答案:

答案 0 :(得分:0)

它将起作用:


instance = ModelInstance()
allowed_fields = ['name', 'username' .... etc ]
for field, value in data_to_fill.items():
   if field in allowed_fields:
      setattr(instance, field, value)

instance.save()