Django добавить объект с текущим пользователем

Я пытаюсь создать todoapp с google login для создания персонального todolist для каждого пользователя.

вот views.py

from django.contrib.auth.decorators import login_required

@login_required
def todoView(request):
  all_todo_items = Todoitem.objects.filter(userid=request.user.id)
  return render(request, 'todoapp/home.html', {'all_items': all_todo_items})

def addTodo(request):
  add_new_item = Todoitem(content=request.POST['content'])
  add_new_item.save()
  return HttpResponseRedirect('/home/')

вот мой код без пользователей, но когда есть текущий пользователь, он выдает эту ошибку

null value in column "id" violates not-null constraint / DETAIL: Failing row contains (null, sampletodo,null). Я полагаю, что третий столбец, который является null, это userid, а первый столбец null это auto increment id, так как я установил его в id SERIAL первичный ключ в таблице todoitem

Я на 100% уверен, что мне нужно добавить что-то @addTodo views.py, я просто не знаю, как добавить todolist с текущим пользователем

EDIT вот мой models.py

class Todoitem(models.Model):
  content = models.CharField(max_length=100)
  userid = models.ForeignKey(AuthUser, models.DO_NOTHING, 
  db_column='userid')

class Meta:
    managed = False
    db_table = 'todoitem'

class AuthUser(models.Model):
password = models.CharField(max_length=128)
last_login = models.DateTimeField(blank=True, null=True)
is_superuser = models.BooleanField()
username = models.CharField(unique=True, max_length=150)
soon...

class Meta:
    managed = False
    db_table = 'auth_user'

Просто передайте текущего пользователя так же, как вы это сделали в todoView. Объект request имеет ссылку на текущего пользователя через request.user. Но вам нужно указать объект user, а не user.id

@login_required
def todoView(request):
  all_todo_items = Todoitem.objects.filter(userid=request.user)  # changed to request.user
  return render(request, 'todoapp/home.html', {'all_items': all_todo_items})

def addTodo(request):
  add_new_item = Todoitem(content=request.POST['content'], userid=request.user)
  add_new_item.save()
  return HttpResponseRedirect('/home/')

Вы должны использовать хорошую модель пользователя, чтобы иметь возможность использовать request.user.

Попробуйте такую модель:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.BooleanField()
    username = models.CharField(unique=True, max_length=150)

тогда в ваших представлениях вы можете сделать следующее

def addTodo(request):
  add_new_item = Todoitem(content=request.POST['content'], userid=request.user)


def todoView(request):
  all_todo_items = Todoitem.objects.filter(userid=request.user)  # changed to request.user
  return render(request, 'todoapp/home.html', {'all_items': all_todo_items})
Вернуться на верх