gpt4 book ai didi

django-forms - Django-Oscar Basket 定制

转载 作者:行者123 更新时间:2023-12-04 04:23:28 24 4
gpt4 key购买 nike

我将 Djnago-oscar 用于基于太阳能设备的电子商务网站。我需要为“Basket”模型添加一个选项,其中包含“Battery Name”、“Notes”和
“制造商”。我不想将它添加到子类 AbstractProduct 中是有原因的。相反,我想用子类 Basket 模型构建它。
现在我需要帮助来理解我的工作流程,以便使用 AddToBasket 表单来完成这项工作。在 Django-oscar/basket 中有使用 formset 工厂和表单的 formsets.py。
我有点困惑,决定从社区寻求帮助。

以下是代码:

模型.py

MANUFACTURERS = (
('UPS SYSTEMS', 'UPS SYSTEMS'),
('VOLTA', 'VOLTA'),
('TOSHIBA ', 'TOSHIBA '),
)

BATTERIES = (
('LITHIUM', 'LITHIUM'),
('NICAD', 'NICAD'),
('NIFE ', 'NIFE '),
)

class AddBattery(AbstractBasket):
battery_name = models.CharField(max_length=1, choices=BATTERIES)
manufacturers = models.CharField(max_length=1, choices=MANUFACTURERS)
price = models.DecimalField(decimal_places=2, max_digits=6)
notes = models.CharField(max_length=200, null=True, blank=True)

def __str__(self):
return self.battery_name


class Basket(AbstractBasket):
add_bat=models.ForeignKey(_(u'Add a Batter'), to=AddBattery, null=True, blank=True)

forms.py
from django import forms
from django.conf import settings
from django.db.models import Sum
from django.utils.translation import ugettext_lazy as _

from oscar.forms import widgets
from oscar.apps.basket.forms import BasketLineForm as CoreBasketLineForm,\
SavedLineForm as CoreSavedLineForm, BasketVoucherForm as CoreBasketVoucherForm,\
AddToBasketForm as CoreAddToBasketForm

from .models import AddBattery
from oscar.core.loading import get_model, get_classes

Line = get_model('basket', 'line')
Basket = get_model('basket', 'basket')
Product = get_model('catalogue', 'product')



class BasketLineForm(CoreBasketLineForm):
class AddBatteryForm(CoreBasketLineForm.Meta):
model = AddBattery
fields = ['battery_name', 'manufacturers', 'comment']

View .py

我需要帮助来弄清楚这部分,因为它有太多嵌套元素,我无法正确完成。
非常感谢帮助。

模板:
我可以解决这个问题,因为我需要管理员能够添加它,但最终用户只能选择价格。
根据客户的选择,我需要将价格与产品和电池结合起来。对这部分的任何建议也很好
关于如何从购物车中的两者获取合并价格以进行结帐。

最佳答案

  • 不要在篮子模型中添加您的字段。您需要将 Line 模型子类化。
  • 子类 forms.py 和 formsets.py。您只需要更改 BasketLineForm、SavedLineForm 和 AddBasketForm。在您以自己的形式对这些进行子类化之后。留下其余的表格。
  • 根据您的需要编辑您自己的表单集中的子类 BaseBasketLineFormSet 和 BaseSavedLineFormSet。
  • 通过提供您添加的表单、表单集和 args/kwargs,子类化 BasketView 和 AddBasketView。
  • 将模板目录从应用程序复制到您自己的文件夹中,并在上面提到的最后一部分中在 bag_total.html 中添加表单。

  • 但话虽如此……它违反了其他人所解释的工作流程。就编程而言,在任何情况下对您都没有任何限制。但是您应该始终考虑最合理的途径来解决您的问题。

    关于django-forms - Django-Oscar Basket 定制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53557546/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com