【发布时间】:2021-12-30 09:49:14
【问题描述】:
我想使用字典通过模型表单和视图将值存储在模型中。今天我是这样解决的:
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']
字典中的键与我要存储的值的字段名称相同。我想让这个函数更 Pythonic - 像这样:
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(直到迭代开始,为简单起见,排除返回渲染等)
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']
【问题讨论】:
-
你能分享你的模型、表格和视图吗?如果使用 ModelForm,为什么要从 dict 手动分配值而不是从 request.POST 填充表单?
-
我已编辑问题以添加代码示例。这些值是通过一个字典添加的,该字典是根据用户在模板上输入的函数生成的,因此每次保存的值都是不同的,而不是手动输入。
-
可以分享生成
scores_dict的函数吗? dict 中的所有键是否都完全映射到模型上的字段? -
我可以,但我认为它不会添加任何相关内容。字典中的每个键都映射到模型中的一个字段,因此编写 form.variable_2 = score_dict['variable_2'] 等现在可以正常工作,但它不像我想要的那样 Python 或可扩展。
标签: python django django-models django-orm