将记录和字段列表保存到Django mod

2024-06-25 23:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我从我的网站管理员处收到此列表:

[['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


Tags: 用户模型falsedefault列表datamodels选项
2条回答

您可以迭代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)
])

希望对你有帮助。你知道吗

尝试以下操作:

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)

相关问题 更多 >