Сбой ограничения NOT NULL: tasks_task.user_id

Я работаю над проектом Django, используя Python3. У меня возникает эта ошибка, когда я пытаюсь создать новую задачу.

django.db.utils.IntegrityError: NOT NULL constraint failed: tasks_task.user_id

Веб-приложение работает нормально, но когда я пытаюсь создать новую задачу, возникает ошибка, я прочитал все сообщения, связанные с этой проблемой, но не нашел решения.

Я пытался обновить sqlite3, но ничего не получилось.

Это мой код

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.db import IntegrityError
from .forms import TaskForm


def home(request):
    return render(request, 'home.html')

# Create your views here.


def signup(request):

    if request.method == 'GET':
        return render(request, 'signup.html', {
            'form': UserCreationForm
        })
    else:
        if request.POST['password1'] == request.POST['password2']:
            try:
                user = User.objects.create_user(
                    username=request.POST['username'], password=request.POST['password1'])
                user.save()
                login(request, user)
                return redirect('tasks')

            except IntegrityError:
                return render(request, 'signup.html', {
                    'form': UserCreationForm,
                    'error': 'Username already taken'
                })

        return render(request, 'signup.html', {
            'form': UserCreationForm,
            'error': 'Passwords did not match'
        })


def tasks(request):
    return render(request, 'tasks.html')


def create_task(request):
    if request.method == 'GET':
        return render(request, 'create_task.html', {
            'form': TaskForm,
        })
    else:
        try:
         form = TaskForm(request.POST)
         new_task = form.save(commit=False)
         new_task.User = request.user
         new_task.save()
         return redirect('tasks')
        except ValueError:
         return render(request, 'create_task.html', {
            'form': TaskForm,
            'error': 'Bad data passed in. Try again.'
        })


def signout(request):
    logout(request)
    return redirect('home')


def signin(request):
    if request.method == 'GET':
        return render(request, 'signin.html', {
            'form': AuthenticationForm
        })
    else:
        user = authenticate(
            request, username=request.POST['username'], password=request.POST['password'])
        if user is None:
            return render(request, 'signin.html', {
                'form': AuthenticationForm,
                'error': 'Username and password did not match'
            })
        else:
            login(request, user)
            return redirect('tasks')

Вот мой models.py


from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True)
    created = models.DateTimeField(auto_now_add=True)
    datecompleted = models.DateTimeField(null=True, blank=True)
    important = models.BooleanField(default=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title + ' | ' + str(self.user)

Похоже, вы используете неправильное имя атрибута при установке пользователя. Обратите внимание, что все атрибуты Python чувствительны к регистру:

class Task(models.Model):
    ...
    user = models.ForeignKey(User, on_delete=models.CASCADE)

but

new_task.User = request.user

Замена на new_task.user должна решить проблему.

Вернуться на верх