Возможно, проблема в файле views.py в методе add_to_cart (). этот метод использует 3 класса из models.py
Вот мой файл views.py
from django.shortcuts import render
from .models import Item, Order, OrderItem
from django.views.generic import ListView, DetailView
from django.shortcuts import reverse, get_object_or_404, redirect
from django.utils import timezone
class HomeView(ListView):
model = Item
template_name = 'home-page.html'
class ItemView(DetailView):
model = Item
template_name = 'product.html'
def checkout(request):
context = {
'items': Item.objects.all()
}
return render(request, 'checkout-page.html', context)
def add_to_cart(request, slug):
item = get_object_or_404(Item, slug=slug)
order_item = OrderItem.objects.create(item=item)
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
if order.items.filter(item__slug=item.slug).exists():
order_item.quantity += 1
order_item.save()
else:
ordered_date = timezone.now()
order = Order.objects.create(
user=request.user, ordered_date=ordered_date)
order.items.add(order_item)
return redirect("core:product",
slug=slug)
мой файл models.py. идентификатор класса заказа создает проблему. Значение исключения: ограничение NOT NULL не выполнено: core_order.items_id Тип исключения: IntegrityError
from django.conf import settings
from django.db import models
from django.shortcuts import reverse, get_object_or_404, redirect
Categoty_choice = (
('s', 'Shirt'),
('sw', 'Sport Wear'),
('o', 'Outwear')
)
Label_choice = (
('p', 'primary'),
('s', 'secondary'),
('d', 'danger')
)
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
discount_price = models.FloatField(blank=True, null=True)
category = models.CharField(choices=Categoty_choice, max_length=2)
label = models.CharField(choices=Label_choice, max_length=1)
slug = models.SlugField()
description = models.TextField()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("core:product", kwargs={"slug": self.slug})
def get_add_to_cart_url(self):
return reverse("core:add_to_cart", kwargs={"slug": self.slug})
class OrderItem(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
def __str__(self):
return self.item
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
items = models.ForeignKey(OrderItem, on_delete=models.CASCADE)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
ordered = models.BooleanField(default=False)
def __str__(self):
return self.user.username
urls.py file. некоторые модели являются CBV, а некоторые шаблоны являются нормальными
from django.urls import path
from . import views
app_name = 'core'
urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('product/<slug>/', views.ItemView.as_view(), name='product'),
path('add-to-cart/<slug>/', views.add_to_cart, name='add_to_cart'),
path('checkout/', views.checkout, name='checkout'),
]