我从我的网站管理员那里收到此列表:
[['present', '2'],['present', '1'], ['study', '1'], ['study', '3'], ['present', '4'], ['study', '4'],
第一个选项实际上是需要在Rollcall模型中进行编辑的字段名称,第二个选项是用户ID。
现在,我想将此列表保存到Rollcall
模型中:
#models.py
class Rollcall(models.Model):
student = models.ForeignKey(User)
present = models.BooleanField(default=False)
study = models.BooleanField(default=False)
因此,我首先检查并找到列表中特定用户具有的各个字段, 然后将所有这些字段保存为模型中的一位用户。 我该怎么做?
-更新1:
这是HTML
文件:
{% forstudent in students %}
<tr>
<td>{{student}} </td>
<td> <input type="radio" name="present_{{student.id}}" value="1"></td>
<td> <input type="radio" name="study_{{student.id}}" value="1"></td>
</tr>
{% endfor %}
我以这种方式获取数据并将其放入我在第一个问题中解释的列表:
data_list = [key.split('_') for key in request.POST.keys()][1:]
每个学生都可以在场或不在场,或者可以学习或不学习。我的确切问题是:如何保存我所有学生的数据?有没有其他方法可以解决这个问题而无需data_list
或其他任何方法创造更好的data_list
的方法吗?
答案 0 :(得分:1)
尝试这样的事情:
l=[['present', '2'], ['present', '3'], ['present', '4'], ['study', '2']]
dic={}
for arr in l:
dic.setdefault(arr[1], []).append(arr[0])
for key in dic:
Rollcall.objects.create(present=True if 'present' in dic[key] else False,\
student=True if 'student' in dic[key] else False, \
study=User.objects.get(id=int(key)))
或在创建字典(dic
)后批量制作:
final_objects = [Rollcall(is_present=True if 'present' in final_dic[key] else False,
is_study=True if 'study' in final_dic[key] else False,
student=User.objects.get(id=int(key)),
) for key in final_dic]
Rollcall.objects.bulk_create(final_objects)
答案 1 :(得分:1)
您可以遍历list
,创建Rollcall
实例并使用bulk_create()
Manager
/ QuerySet
方法(这样可以避免很多数据库命中(只有一个INSERT
个查询就足够了),并为您保证了atomicity
)。
data_list = [['present', '2'], ['present', '3'], ['present', '4'], ['study', '1']]
Rollcall.objects.bulk_create([
Rollcall(present=True if present == 'present' else False, student_id=int(student_id)) for present, student_id in data_list)
])
希望,对您有帮助。