django Оскар - PullRequest
       0

django Оскар

0 голосов
/ 22 февраля 2020

Я новичок в Django Oscar framework.

Моя цель состоит в том, чтобы администратор мог создать пакет продуктов с количеством, а также он мог добавить массовое предложение к этому пакету (Absolute или FIxed Benefit). Упаковка товара должна соответствовать количеству товара в корзине, тогда предложение будет действовать.

Например,

PRODUCT PACKAGE A

PRODUCT A  has 1 quantity
PRODUCT B  has 2 quantity

Чтобы создать эту вещь, я расширяю модель диапазона и добавляю поле количества. Кроме того, я расширяю условие и создаю пользовательское условие упаковки, чтобы проверить, соответствует ли корзина этому количеству продукта. Если в корзине есть это количество продукта или количество, превышающее его, будет добавлена ​​выгода.

, а другая вещь, если у ПРОДУКТА А есть одно предложение. и если в ПРОДУКТЕ А в корзине содержится 2 или более количества, вышеуказанное предложение пакета продукта и одно предложение также необходимо применять отдельно, например

,

class RangeProduct(AbstractRangeProduct):
    ''' add quantity field to default model '''
    quantity = models.PositiveIntegerField(default=0)

    def __str__(self):
        return "{} quantity {}".format(self.product, self.quantity)


class Package(models.Model):

    DISCOUNT_FIXED = 'DISCOUNT_FIXED'
    DISCOUNT_PERCENTAGE = 'DISCOUNT_PERCENTAGE'

    DISCOUNT_TYPES = (
        (DISCOUNT_FIXED, 'Discount is a fixed amount off of the products value'),
        (DISCOUNT_PERCENTAGE, 'Discount is a percentage off of the products value')
    )

    package_type = models.ForeignKey(
        PackageType,
        on_delete=models.CASCADE,
        related_name='packages',
    )

    name = models.CharField(max_length=255, verbose_name='Package Name')
    banner = models.ImageField(upload_to='images/packages', null=True, blank=True)
    shop_type_field = models.CharField(choices=ShopTypes.shop_type_choices, max_length=255, null=True)
    discount_type = models.CharField(verbose_name='Discount Type', choices=DISCOUNT_TYPES, max_length=255)
    discount_value = fields.PositiveDecimalField(
        verbose_name='Discount Value', decimal_places=2, 
        max_digits=12, default=0
    )

    total_amount = fields.PositiveDecimalField(
        verbose_name='Discount Value', decimal_places=2, 
        max_digits=12, default=0
    )

    offer = models.ForeignKey(
        Condition,
        on_delete=models.CASCADE,
        related_name="product_package"
    )

    def __str__(self):
        return self.name

    def check_is_satisfied(self, basket):

        conditonOBJ = self.offer
        rangeOBJ = conditonOBJ.range

        all_products_data = {}

        for rangeLine in RangeProduct.objects.filter(range=rangeOBJ):

            rangeID = rangeLine.id
            rangeProduct = rangeLine.product
            rangeQuantity = rangeLine.quantity

            basket_Line = self.get_basket_line(basket=basket, product=rangeProduct)

            if basket_Line is None:
                all_products_data[rangeID] = False
            else:

                # if has product
                # then check its quantity with basket quantity
                if rangeQuantity == 0:
                    all_products_data[rangeID] = False

                elif rangeQuantity <= basket_Line.quantity:
                    all_products_data[rangeID] = True

                else:
                    all_products_data[rangeID] = False

        # check if all product data is true
        return all(all_products_data.values())

class ProductPackageOffer(Condition):

    name = "Product Package Offer"

    class Meta:
        proxy = True

    def is_satisfied(self, offer, basket):
        print("is_satisfied package condition")

        package = offer.condition.product_package.all().first()

        if package is None:
            return False
        else:
            return package.check_is_satisfied(basket=basket)

это условие пакета я проверил, соответствует ли пакет количеству корзины, а также мне нужно создать пользовательское преимущество, чтобы добавить одноразовое и оптовое предложение. я застрял в этой вещи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...