Integrity Error NOT NULL constraint failed even though I have set blank=True, null=True in my model

Я получаю ошибку ограничения NOT NULL в моем коде при попытке сохранить мою форму модели, несмотря на то, что поля, которые я оставил пустыми, являются необязательными (установил blank=True, null=True) в models.py

Я очень запутался, что я делаю не так?

Ошибка выскакивает, когда я оставляю первое необязательное поле пустым (описание). Заполнение любого из них вручную перед work.save() переносит проблему на следующее поле и проходит, когда все поля заполнены.

EDIT: это также происходит при попытке создать рабочий экземпляр из панели администратора.

models.py

forms.py

class WorkForm(ModelForm):
    class Meta:
        model = Work
        fields = ['name', 'year', 'medium', 'description', 'authors', 'classification', 'location', 'link', 'record_creator', 'cd1_name', 'cd1_value', 'cd2_name', 'cd2_value', 'cd3_name', 'cd3_value', 'cd4_name', 'cd4_value', 'cd5_name', 'cd5_value', 'cd6_name', 'cd6_value', 'cd7_name', 'cd7_value']

views.py

def add_work(request, folder_pk):
    '''
    Add a work to the filesystem.

    folder_pk: the primary key of the parent folder

    Checks if the user is logged in and if the user is the creator of the folder. If so, the user is allowed to add a work to the folder. Otherwise, the user is redirected to the login page.
    '''
    # add work to the database
    parent = Folder.objects.get(pk=folder_pk)
    mediaFormSet = modelformset_factory(MediaFile, fields=('name', 'alt_text', 'caption', 'media'), extra=1)

    

    if request.method == "POST" and parent.archive.creator == get_current_user():
        # if the form has been submitted
        # Serve the form -> request.POST
        form = WorkForm(request.POST)
        # mediaFormSet = mediaFormSet(request.POST)

        if form.is_valid(): # if the all the fields on the form pass validation

            # Generate archival ID for work
            # archival ID is random, unique 6 digit number that identifies the work
            archival_id = get_archival_id()

            # create a new work with the parameters retrieved from the form. currently logged in user is automatically linked
            work = form.save(commit=False)
            work.work_slug = archival_id
            work.folder=parent
            work.archive=parent.archive
            work.save()
            
            # Redirect to dashboard page
            return redirect('add_media_to_work', work_pk=work.pk)

    else:
        # If the form is not submitted (page is loaded for example)
        # -> Serve the empty form
        form = WorkForm()


    return render(request, "archival/add_edit_work.html", {"workForm": form})

я столкнулся с той же проблемой, что и вы, я сделал форму регистрации, и она выдавала ту же ошибку, потому что метод .save() выполнялся до того, как я заполнял поля, не было данных для сохранения, из-за этого: тип поля был None. поэтому я просто реализовал оператор if else, чтобы убедиться, что метод .save() не будет выполняться, если тип поля был None, вот фрагмент:

if field == None:
    pass
else:
    form.save()
Вернуться на верх