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
)