空值违反了非空约束,但是模型具有空白= True null = True

时间:2019-10-26 09:24:55

标签: django postgresql

我有一个表格

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,然后再次迁移。可能这会很重要。

1 个答案:

答案 0 :(得分:1)

根据this问题,我应该只保留null=True。可行!