我有一个表格
class EmployeeHistoryForm(forms.ModelForm):
department = forms.ModelChoiceField(
label="Подразделение",
queryset=Department.objects.all()
)
post = forms.ModelChoiceField(
label="Должность",
queryset=Post.objects.all()
)
rank = forms.IntegerField(
label="Разряд",
validators=[
MaxValueValidator(MAX_RANK),
MinValueValidator(1)
])
start_date = forms.DateField(
label="Дата начала работы",
initial=datetime.now().date()
)
class Meta:
model = EmployeeHistory
exclude = ['employee', 'end_date']
建模
class EmployeeHistory(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
rank = models.IntegerField(
validators=[
MaxValueValidator(MAX_RANK),
MinValueValidator(1)
]
)
start_date = models.DateField()
end_date = models.DateField(blank=True, null=True)
employee
字段是用另一种形式填写的,我想暂时保持end_date
的非输入状态。
这是视图:
def add_employee_action(request):
if request.method == "POST":
...
history_form = EmployeeHistoryForm(request.POST)
if personal_form.is_valid() and history_form.is_valid():
...
employee.save()
history=EmployeeHistory(
employee=employee,
department=Department.objects.filter(
pk=request.POST['department']
)[0],
post=Post.objects.filter(
pk=request.POST['post']
)[0],
rank=request.POST['rank'],
start_date=datetime.now().date(),
end_date=None
)
history.save()
else:
...
history_form = EmployeeHistoryForm()
return render(
request,
'add_employee.html',
context={
...
'history_form': history_form,
}
)
但是当我提交表单时,有一个django.db.utils.IntegrityError: null value in column "end_date" violates not-null constraint
DETAIL: Failing row contains (7, 12, 2019-10-26, null, 1, 10, 1).
,我正在使用PostgreSQL。
注意:我在第一次迁移后添加了blank=True, null=True
,然后再次迁移。可能这会很重要。