【发布时间】:2021-01-06 13:41:13
【问题描述】:
我是 Django 和 Web 开发的新手。我正在使用表单集将数据保存到数据库中。创建部分工作正常,但是当我尝试使用表单集更新数据库中的现有数据时遇到问题。
以下是相关代码sn-ps:
型号:
from django.db import models
class GradingSchemeName(models.Model):
name = models.CharField(max_length=250, null=False, blank=False, unique=True)
class GradingScheme(models.Model):
scheme_name = models.ForeignKey(to=GradingSchemeName, on_delete=models.CASCADE)
grade = models.CharField(max_length=250, null=False, blank=False)
score_range_begin = models.SmallIntegerField()
score_range_end = models.SmallIntegerField()
class Meta:
unique_together = ('scheme_name', 'grade',)
表格:
from django.forms import ModelForm, inlineformset_factory
GradeFormSet = inlineformset_factory(
parent_model=GradingSchemeName, model=GradingScheme,
fields=['scheme_name', 'grade', 'score_range_begin', 'score_range_end'],
extra=10, max_num=100, can_delete=False
)
观看次数:
# Passing the pre-filled form for rendering. For the sake of illustration, I have hardcoded the `id=1`:
instance = GradingSchemeName.objects.get(id='1')
context['grade_formset'] = GradeFormSet(instance=instance)
# checking the request data from the post(request) on form submission:
grades_formset = GradeFormSet(request.POST, instance=instance)
请注意,在创建表单集期间,GradingScheme 模型中保存了 3 条记录。当我尝试使用上述方法进行更新时,我看到 grades_formset 有 13 条记录(3 条来自 instance 属性,10 条来自额外表单)。该问题是在执行is_valid() 方法时引起的:
if not grades_formset.is_valid():
messages.error(request, 'Form data is invalid!')
is_valid() 方法对 3 条记录中的每一条都抛出以下错误:
- id : 此字段为必填项
- “errorlist nonfield”:具有此方案名称和等级的评分方案已存在。
不确定,如何解决上述两个错误。任何指针都会非常有帮助。提前致谢。
【问题讨论】: