從您提供的描述中,我找不到用於的套件。
您只需要一個材料目錄頁面,其中列出了材料。每種材料都可以添加到當前購物車,這是通過Ajax調用通過材質PK傳遞的url完成的,因此該Ajax調用的視圖可以創建購物車並將該材料添加到購物車。
最後,你需要一個的OrderDetail,你需要一個for循環上的所有材料,目前在用戶的購物車。
您可以第一個完全實現它在數據庫中,與關係模型車,這實際上是已經實施Order類中定義。
然後你就可以添加一個緩存層,以限制寫入/刪除/更新到數據庫,使用Django的會話(這有性能提升,考慮到你在你的數據庫不存儲會話!)
因此總而言之,您可能需要的是(我使用購物車的概念,以暗示用戶只能有一個活動訂單,如果您的要求不同,它可以很容易地更改爲您「VE提供您的訂單模型):
數據模型:
class Cart:
user = 1to1(User, related_name='cart') # Can be a FK if you want several active orders
is_approved = Boolean # To tell if the order is considered Over or is still open
created_at = DateTimeField
...
class Material:
orders = M2M(Cart, through=CartItem)
...
class CartItem:
cart = FK(Cart)
material = FK(Material)
...
瀏覽:
def list_materials(request):
returns_rendered_template_with(materials=Material.objects.all())
#Ajax method, called via Post, you probably need a way to also delete, or edit (number of materials to order ?)
def add_material_to_cart(request, material_id):
cart = Cart.objects.get_or_create(user=request.user)
material = Material.objects.get(pk=material_id)
CartItem(material=material, cart=cart).save()
def order_detail_view(request):
cart = user.cart
cart_items = CartItems.objects.filter(cart=cart)
returns_rendered_template_with(cart_items=cart_items)
個
模板:
material_list.html
....
{% for item in materials %}
{% show material info, such as price, availability, ... %}
<button data-pk={{item.pk}}, ...> to call add_material_to_cart </button>
{% endfor %}
order_detail.html
....
{% for item in cart_items %}
{% show each cart_item.material and its information + whatever you need %}
{% endfor %}
這是可以實現的東西最基本的形式,我明白了,你想要的。
您可以合併幾個這方面的意見一起,可以實現無需對車和CartItem模型「完全會話」的解決方案,剛剛完成訂單獲得持續到我不知道,比爾模式?訂單歷史 ?任何你想要的。
總計問題很容易避免。永遠不要接受客戶,要控制什麼。所以「加入購物車」js只會提交物品ID和數量。它接收新的購物車總數(在服務器上計算)並呈現更新後的迷你購物車。問題解決了。 – Melvyn