Smartphone с ID “None“ не существует. django3
Только учусь Django, и при создании интернет-магазина, в админке, в категории Smartphone, при добавлении товара товар не добавляется и пишет " Smartphone с ID “None“ не существует "
Код из файла models.py
Импортированные Библиотеки
import sys
from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
from PIL import Image
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.urls import reverse
from io import BytesIO
def get_product_url(obj, viewname):
ct_model = obj.__class__._meta.model_name
return reverse(viewname, kwargs={
'ct_model': cl_model,
'slug': obj.slug
})
#1
class Category(models.Model):
name = models.CharField(max_length=255, verbose_name='Имя категории')
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
#2
class Product(models.Model):
# MIN_RESOLUTION = (400, 400)
MAX_RESOLUTION = (800, 800)
MAX_IMAGE_SIZE = 3145728
class Meta:
abstract = True
category = models.ForeignKey(Category, verbose_name='Категория', on_delete=models.CASCADE)
title = models.CharField(max_length=255, verbose_name='Наименование')
slug = models.SlugField(unique=True)
image = models.ImageField(verbose_name='Изображение')
description = models.TextField(verbose_name='Описание', null=True)
price = models.DecimalField(verbose_name='Цена', max_digits=9, decimal_places=2)
def __str__(self):
return self.title
class Smartphone(Product):
diagonal = models.CharField(max_length=255, verbose_name='Диагональ')
display_type = models.CharField(max_length=255, verbose_name='Тип дисплея')
ram = models.CharField(max_length=255, verbose_name='Оперативная память')
resolution = models.CharField(max_length=255, verbose_name='Разрешение экрана')
accum_value = models.CharField(max_length=255, verbose_name='Объем батареи')
sd = models.BooleanField(default=True)
sd_value_max = models.CharField(max_length=255, verbose_name='Объем встраимоевой памяти')
main_cam_mp = models.CharField(max_length=255, verbose_name='Главная камера')
front_cam_mp = models.CharField(max_length=255, verbose_name='Фронтальная камера')
def __str__(self):
return '{} : {}'. format(self.category.name, self.title)
def get_absolute_url(self):
return get_product_url(self, 'product_detail')
#3
class CartProduct(models.Model):
user = models.ForeignKey('Customer', verbose_name='Покупатель', on_delete=models.CASCADE)
cart = models.ForeignKey('Cart', verbose_name='Корзина', on_delete=models.CASCADE, related_name='related_products')
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
qty = models.PositiveIntegerField(default=1)
final_price = models.DecimalField(verbose_name='Общая цена', max_digits=9, decimal_places=2)
def __str__(self):
return 'Продукт: {} (для корзины)'.format(self.product.title)
Код из файла admin.py
class SmartphoneAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'category':
return ModelChoiceField(Category.objects.filter(slug='smartphones'))
return super().formfield_for_foreignkey(db_field, request, **kwargs)
#---register models---
admin.site.register(Smartphone, SmartphoneAdmin)