Я продолжаю получать эту ошибку 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)
Вернуться на верх