У меня есть форма
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
после первой миграции, затем мигрируйте снова. Может быть, это будет важно.