@Otisfrost

Почему в методе ProductInOrder.objects.filter, джанго не видит в ProductInOrder сущности objects.filter?

from django.db import models
from products.models import Product
from django.db.models.signals import post_save
# Create your models here.
class Status(models.Model):
name = models.CharField(max_length=24, blank=True, null=True, default=None)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)

#функция каждой записи присваивает id, email в админке
def __str__(self):
return "Статус %s" % self.name

#функция изменяет название модели в единственном и множественном числе в админке
class Meta:
verbose_name = 'Статус заказа'
verbose_name_plural = 'Статусы заказа'

class Order(models.Model):
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0) # конечная цена за все товары в заказе
customer_name = models.CharField(max_length=64, blank=True, null=True, default=None)
customer_email = models.EmailField(blank=True, null=True, default=None)
customer_phone = models.CharField(max_length=48, blank=True, null=True, default=None)
customer_adress = models.CharField(max_length=128, blank=True, null=True, default=None)
status = models.ForeignKey(Status, on_delete=models.DO_NOTHING)
comments = models.TextField(blank=True, null=True, default=None)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)

#функция каждой записи присваивает id, email в админке
def __str__(self):
return "Заказ %s %s" % (self.id, self.status.name)

#функция изменяет название модели в единственном и множественном числе в админке
class Meta:
verbose_name = 'Заказ'
verbose_name_plural = 'Заказы'

def save(self, *args, **kwargs):
super(Order, self).save(*args, **kwargs)

class ProductInOrder(models.Model):
order = models.ForeignKey(Order, blank=True, null=True, default=None, on_delete=models.DO_NOTHING)
product = models.ForeignKey(Product, blank=True, null=True, default=None, on_delete=models.DO_NOTHING)
nmb = models.IntegerField(default=1)
price_per_item = models.DecimalField(max_digits=10, decimal_places=2, default=0)
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0) #цена * количество
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)

#функция каждой записи присваивает id, email в админке
def __str__(self):
return "Товар %s" % self.product.name

#функция изменяет название модели в единственном и множественном числе в админке
class Meta:
verbose_name = 'Товар в заказе'
verbose_name_plural = 'Товары в заказе'

#Переопределяем модель ProductInOrder
def save(self, *args, **kwargs):
price_per_item = self.product.price #Берем из продукта цену
self.price_per_item = price_per_item
self.total_price = self.nmb * price_per_item #Получаем общую сумму товаров в заказе

super(ProductInOrder, self).save(*args, **kwargs)

def product_in_order_post_save(sender, instance, created, **kwargs):
order = instance.order
all_products_in_order = ProductInOrder.objects.filter(order=order, is_active=True) # Считам товары в заказе

order_total_price = 0
for item in all_products_in_order:
order_total_price += item.total_price

instance.order.total_price = order_total_price
instance.order.save(force_update=True)

post_save.connect(product_in_order_post_save, sender=ProductInOrder)

------------------------------------------------------------------------------------------
В итоге вылезает ошибка: NameError: name 'ProductInOrder' is not defined
  • Вопрос задан
  • 29 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы