html - 如何根据 django 中的查询创建用于提供多个对象条目的表单?
问题描述
我目前正在处理我的大学管理应用程序,staff
可以在其中输入学生的内部分数,学生可以查看他们的分数。我坚持的是,我想要一个表格列表来填写每个学生的内部分数并立即提交。
我用下面的代码尝试了modelformset,它的工作原理如下
formset = modelformset_factory(Internal, fields=('student','marks1','marks2','marks3'))
if request.method == "POST":
form=formset(request.POST)
form.save()
form = formset()
return render(request, 'console/academics/internals.html',{'form':form})
对于模型
class Internal(models.Model):
student = models.ForeignKey(User, on_delete=models.CASCADE)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
marks1 = models.IntegerField(default=0)
marks2 = models.IntegerField(default=0)
marks3 = models.IntegerField(default=0)
marks = models.IntegerField(default=100)
marksob = models.IntegerField(default=0)
def save(self):
self.marksob = (self.marks1 + self.marks2 + self.marks3)/15
return super(Internal, self).save()
<input>
我希望使用 html而不是传入html 来呈现表单{{form}}
。此外,我希望表单根据查询仅显示特定学生的条目。谁可以帮我这个事?
解决方案
我希望表单根据查询仅显示特定学生的条目。
如文档中所述,您可以为您的表单集指定一个queryset
:
formset = modelformset_factory(Internal, queryset=Internal.Objects.filter(...), fields=('student','marks1','marks2','marks3'))
我希望在 html 中使用而不是在 html 中传递 {{form}} 来呈现表单
您可以通过迭代字段来做到这一点,就像普通形式一样:
<form method="post"> {% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{% for field in form %}
{{ field.label_tag }} {{ field }}
{% endfor %}
{% endfor %}
</form>
在模板中使用表单集的更多详细信息。
编辑
如果您想为表单字段使用自定义 css 类,您可以执行以下操作:
<form method="post"> {% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
<div class="...">
{{ form.marks1.errors }}
<label for="{{ form.marks1.id_for_label }}">Your email address:</label>
<input type="number" name="{{ form.marks1.name }}" value="{{ form.marks1.value }}" class="css-class">
</div>
<!-- and for other fields as well -->
{% endfor %}
</form>
推荐阅读
- python - Python有没有办法使用装饰器包装类的功能?
- c++-standard-library - 如何开始使用 C++ 库
- java - ServerServiceDefinition 和具体类有什么关系?
- objective-c - 如何使用按位运算符将带有 NSData 字节的 Obj-C 方法转换为 Swift
- c# - 如何在 ASP.NET Web API C# 中返回 JSON 数组
- gnuplot - 如何使用 GnuPlot 绘制立方体/矩形?
- python - Cygwin:无法从本地目录安装 paramiko
- amazon-web-services - 我的基于 Cognito 的应用程序如何确定登录用户应该可以使用哪个 UI?
- ignite - 找不到 JDBC 的类“IgniteJdbcThinDataSource”
- sqlalchemy - sqlalchemy load_only 列并使用标签重命名列名