Django.db.utils.IntegrityError: NOT NULL constraint failed: xx_xx.author_id ** ошибка автора в python/django

Я пытаюсь создать сайт с базой данных на Python и Django. Я не могу POST с моим самостоятельно созданным индексным интерфейсом. Это работает с интерфейсом администратора django.

Вот мой код:

views.py:

from django.shortcuts import render
from .models import Item
from django.db.models import Q
from django.contrib.auth.decorators import login_required
from django.views.generic import ListView, DetailView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import CreateView



# Create your views here.






def mylist(request):
    if request.method == 'POST':
        Item.objects.create(name = request.POST['itemName'],
        beschreibung = request.POST['itemBeschreibung'],
        link = request.POST['itemTag'],
        public = request.POST['itemPublic'],
        useridnummer = request.POST['itemUserid'],)
        post = request.save(commit=False)
        post.author = request.user

    all_items = Item.objects.all()

    if 'q' in request.GET:
        q = request.GET['q']
        # all_items = Item.objects.filter(name__icontains=q)
        multiple_q = Q(Q(name__icontains=q) | Q(beschreibung__icontains=q) | Q(link__icontains=q))
        all_items = Item.objects.filter(multiple_q)


    return render(request, 'index.html', {'all_items': all_items})






@login_required(login_url='user-login')
def private(request):
    all_items = Item.objects.all()
    return render(request, 'private.html', {'all_items': all_items})

models.py:

from django.db import models
from django.conf import settings
from datetime import date
from django.contrib.auth import get_user_model

# Create your models here.

User = get_user_model()

class Item(models.Model):
    created_at = models.DateField(default=date.today)
    name = models.CharField(max_length=200)
    beschreibung = models.TextField(max_length=10000, default="")
    link = models.CharField(max_length=200, default="")
    public = models.CharField(max_length=200, default="")
    useridnummer = models.CharField(max_length=200, default="")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    


    def __str__(self):
        #return self.title + ' | ' + self.author
        return str(self.id) + ' ' + self.name + ' | ' + str(self.author)
from django.db import models
from django.conf import settings
from datetime import date
from django.contrib.auth import get_user_model

# Create your models here.

User = get_user_model()

class Item(models.Model):
    created_at = models.DateField(default=date.today)
    name = models.CharField(max_length=200)
    beschreibung = models.TextField(max_length=10000, default="")
    link = models.CharField(max_length=200, default="")
    public = models.CharField(max_length=200, default="")
    useridnummer = models.CharField(max_length=200, default="")
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    


    def __str__(self):
        #return self.title + ' | ' + self.author
        return str(self.id) + ' ' + self.name + ' | ' + str(self.author)

Когда я пытаюсь добавить какой-нибудь пост, он выдает ошибку: django.db.utils.IntegrityError: NOT NULL constraint failed: mylist_item.author_id

Я попытался определить класс в models.py. Это вроде бы работает, но я не уверен, как передавать id автора или как установить его в views.py

Попробуйте этот фрагмент кода

if request.method == 'POST':
  Item(
    name = request.POST['itemName'],
    beschreibung = request.POST['itemBeschreibung'],
    link = request.POST['itemTag'],
    public = request.POST['itemPublic'],
    useridnummer = request.POST['itemUserid'],
    author = request.user
  ).save()


# ------------------ OR ---------------------

if request.method == 'POST':
  Item.objects.create(
    name = request.POST['itemName'],
    beschreibung = request.POST['itemBeschreibung'],
    link = request.POST['itemTag'],
    public = request.POST['itemPublic'],
    useridnummer = request.POST['itemUserid'],
    author = request.user
  )
Вернуться на верх