Я продолжаю получать эту ошибку NOT NULL constraint failed: lists_listcreate.user_id
Я пытаюсь сделать сайт, на котором пользователи могут создавать списки, а затем просматривать эти списки. Мой сайт устроен так: пользователь создает список и дает ему имя, а затем переходит на следующую страницу, где он может добавить элементы в свой список. Процедура входа работает нормально, и вы можете перейти на страницу создания списка. Однако, когда вы нажимаете кнопку next на странице создания списка и пытаетесь перейти на страницу, где вы переходите на страницу добавления элементов в список, выдает следующую ошибку: IntegrityError at /your_lists/new_list/ NOT NULL constraint failed: lists_listcreate.user_id
Просмотров:
from django.shortcuts import render
from .models import List, ListIcon, ListCreate
from django.views.generic import TemplateView, CreateView
from django.views.generic.edit import FormView
from django.contrib.auth.mixins import LoginRequiredMixin
from . import models
from .forms import AddListItemForm, CreatListForm
from django.http import HttpResponseRedirect
# Create your views here.
class CreateList(CreateView, LoginRequiredMixin):
model = ListCreate
form_class = CreatListForm
template_name ="lists/list_form.html"
success_url = '/add_item/'
class AddListItem(CreateView, LoginRequiredMixin):
model = List
form_class = AddListItemForm
template_name = "lists/AddListItem.html"
def index(requst):
list = CreateList.objects.all()
if request.method == "POST":
if "add_one_more" in requst.POST:
list.save()
return redirect("/")
if "done" in requst.POST:
return redirect("/lists/your_lists/")
class ViewAllLists(TemplateView, LoginRequiredMixin):
model = ListIcon
template_name = 'lists/EveryList.html'
def get_user_list_icons(self, **kwargs):
if request.user.is_authenticated():
lists_by_user = ListIcon.objects.filter(user=request.user)
return render(lists_by_user)
Модели:
from django.db import models
from django.contrib.auth import get_user_model
# Create your models here.
User = get_user_model()
class List(models.Model):
user = models.ForeignKey(User, related_name='lists_ListIcon_user', on_delete=models.CASCADE)
list_item = models.CharField(max_length=300, blank=True)
#class AddListItem(models.Model):
class ListCreate(models.Model):
user = models.ForeignKey(User, related_name='lists_ListIcon_users', on_delete=models.CASCADE)
list_names = models.CharField(max_length=100, default='Enter list name here')
class ListIcon(models.Model):
user = models.ForeignKey(User, related_name='users', on_delete=models.CASCADE)
list_title = models.ForeignKey(ListCreate, related_name='list_name', on_delete=models.CASCADE)
enter code here
Вы получаете эту ошибку, потому что не передаете пользователя при создании экземпляра списка, переопределение метода form_valid должно быть исправлено следующим образом.
class AddListItem(CreateView, LoginRequiredMixin):
model = List
form_class = AddListItemForm
template_name = "lists/AddListItem.html"
def index(requst):
list = CreateList.objects.all()
if request.method == "POST":
if "add_one_more" in requst.POST:
list.save()
return redirect("/")
if "done" in requst.POST:
return redirect("/lists/your_lists/")
# add this
def form_valid(self, form):
form.instance.user = self.request.user # if you want it to be the request.user
return super().form_valid(form)