是否可以通过在for循环中循环相同的表单来在Django中为模型创建多个对象。我正在使用自定义模型表格。
我的模板是:
{% for query in queryset %}
<form method="POST" action="{% url 'academics' %}" style=" padding: 5%">
{% csrf_token %}
<input type="text" name="Student" class="form-control" id="id_Student"
value="{{query}}">
<input type="text" name="Subject" class="form-control" required id="id_Subject">
<input type="checkbox" name="Presence" id="id_Presence">
<button type="Submit" id="submit">Submit</button>
{% endfor %}
<button type="Submit" id="submit">Submit</button>
</form>
我的models.py是:
class Attendance(models.Model):
Student = models.CharField(max_length=100, blank=False)
Hour = models.CharField(max_length=1, blank=False)
Subject = models.CharField(max_length=8, blank=False)
Date = models.DateTimeField(default=timezone.now)
Presence = models.BooleanField(default=False, blank=False)
def __str__(self):
return f'{self.Student}'
我的views.py是:
def academics(request):
if request.user.is_staff:
form = forms.AttendanceForm()
context = {
'form': form,
'queryset': User.objects.filter(profile__Year='SY',profile__Department='CSE')
}
if request.method == "POST" :
form = forms.AttendanceForm(request.POST)
if form.is_valid():
student = request.POST.get('Student')
hour = request.POST.get('Hour')
subject = request.POST.get('Subject')
boolean = request.POST.get('Presence')
def bool(boolean):
if boolean == 'on':
return 'True'
else:
return 'False'
form = Attendance(Student=student,Hour=hour,Subject=subject,Presence=bool(boolean))
form.save()
return render(request, 'console/academics.html',context)
当前,我可以创建多个对象,但是具有与上一个表单相同的值。即,使用最后一个形式的值创建对象。在这里,我循环了表格,以便为n个查询生成n个表格,并在第一个字段中自动填写名称。我知道解释这有点复杂。有人可以帮忙吗?
答案 0 :(得分:0)
由于声誉,我无法发表评论,但是我相信这是您达到期望结果的方式。使用 WHILE LOOP 。 我自己对python和Django的了解不多,但是我想这是逻辑。如果我错了,请纠正我,而不是投反对票。
var = 0
n = 5
if request.method == "POST":
form = forms.AttendanceForm(request.POST)
if form.is_valid():
while var < n:
student = request.POST.get('Student')
hour = request.POST.get('Hour')
subject = request.POST.get('Subject')
boolean = request.POST.get('Presence')
def bool(boolean):
if boolean == 'on':
return 'True'
else:
return 'False'
form = Attendance(Student=student, Hour=hour,Subject=subject,Presence=bool(boolean))
form.save()
var += 1
return render(request, 'console/academics.html', context)
答案 1 :(得分:0)
我不清楚“循环表单”是什么意思,但是如果您希望用户能够输入任意长度的相似数据集的列表,那么您想要的是{{3 }}或Formset。回来时,您可以验证他提交的所有数据,如果一切都很好,则可以遍历所有数据,通常创建或修改多个对象。