【问题标题】:Save iteration values from list to single object将迭代值从列表保存到单个对象
【发布时间】:2016-09-23 10:14:14
【问题描述】:

我正在尝试使用 for 循环将列表中的许多值存储在一个对象中。都是 FloatField 类型。我的函数为我提供了许多具有一个结果的对象。我只需要一个包含所有值的对象。

views.py

namesOfModelFields = [f.name for f in ModelName._meta.get_fields()]
resultsOfNames = ['name1', 'name2', 'name3']
resultsOfValue - ['1','2','3']
form = f_Form()
newF = form.save(commit=False)
for i in namesOfModelFields:
    if any(str(i) in s for s in resultsOfNames):
        j = resultsOfValue[resultsOfNames.index(i)]
        form = f_Form({str(i) : float(j)})
        newF = form.save(commit=False)
        newF.save()
if form.is_valid():
    form.save_m2m()

forms.py

class f_Form(ModelForm):

  class Meta:
   model = ModelName
   fields = '__all__'

models.py

class ModelName (models.Model):

 name1 = models.FloatField(null=True, blank=True)
 name2 = models.FloatField(null=True, blank=True)
 name3 = models.FloatField(null=True, blank=True)

我的文件比3个多得多。我不能一个一个地做这个

【问题讨论】:

  • “一个对象在一行中包含所有值”是什么意思?你希望得到什么结果?
  • i.imgsafe.org/512aacd7e2.png 这是我数据库中的结果。我想将所有值放在一行中。
  • 那么你为什么要在每次迭代中实例化一个新表单呢?事实上,你为什么要这样做?
  • 这是我尝试的最后一个版本。当 newF.save() 不在 for 循环中时,它只保存最后一条记录。我也尝试在 for 循环中创建两个列表,然后以 newF.iList = iListNum 的形式保存它,但它也不起作用
  • 但是你这里没有一个列表,我不明白你为什么还有一个循环。也许您应该发布您的模型定义和namesOfModelFieldresultsOfNamesresultsOfValue 中的确切内容的示例,并解释它们的来源。

标签: django python-2.7 django-models django-forms django-views


【解决方案1】:

我还是不明白你在做什么。但如果你只想创建一个模型实例,那就去做吧,不要乱用表单或循环。

values = dict(zip(resultsOfNames, resultsOfValues))
new_item = ModelName.objects.create(**values))

【讨论】:

  • 因为我在 doc 中查找单词并将其与模型中的名称进行比较
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多