Я новичок в Django, и я начал проект, который должен иметь решение для корзины покупок / электронной коммерции.
Я читал книгу Джесси Легга о электронной коммерции Django 1.2, и яищу кого-то, кто прошел через это в некоторой степени.Я прошу прощения за то, что могу быть недостаточно конкретным в своем вопросе.
После настройки Django-Registration и Django-профилей книга должна показать, как создать рабочую корзину и связать ее с покупателем.Нет проблем.
Где-то в Главе 3 мы создаем заказ, статус моделей заказа и представления для загрузки товаров в корзину.
Я получаю сообщение об ошибке, что мой «Товар»не определен.Единственное место, в котором «Товар» появляется в объекте «Корзина»:
class Cart(object):
class Item(object):
def __init__(self, itemid, product, quantity=1):
self.itemid = itemid
self.product = product
self.quantity = quantity
def __init__(self):
self.items = list()
self.unique_item_id = 0
def _get_next_item_id(self):
self.unique_item_id += 1
return self.unique_item_id
next_item_id = property(_get_next_item_id)
def add_item(self, product, quantity=1):
item = Item(self.next_item_id, product, quantity)
self.items.push(item)
def is_empty(self):
return self.items == []
def empty(self):
self.items = list()
def remove_item(self, itemid):
self.items = filter(lambda x: x.itemid != itemid, self.items)
def __iter__(self):
return self.forward()
def forward(self):
current_index = 0
while (current_index < len(self.items)):
item = self.items[current_index]
current_index += 1
yield item
(Спасибо, vicvicvic) Вот код, с которым я имею дело.
Модели:
class Order(models.Model):
...
customer = models.ForeignKey(User, blank=True, null=True)
status_code = models.ForeignKey('StatusCode')
date_placed = models.DateTimeField()
total_price = models.DecimalField(max_digits=7, decimal_places=2)
comments = models.TextField(blank=True)
products = models.ManyToManyField(Product, through='ProductInOrder')
...
class ProductInOrder(models.Model):
...
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
unit_price = models.DecimalField(max_digits=7, decimal_places=2)
quantity = models.PositiveIntegerField()
total_price = models.DecimalField(max_digits=7, decimal_places=2)
comments = models.TextField(blank=True)
...
class StatusCode(models.Model):
...
short_name = models.CharField(max_length=10)
name = models.CharField(max_length=300)
description = models.TextField()
...
Количество просмотров:
from django.http import Http404
from django.shortcuts import render_to_response
from django.template import RequestContext
from coleman.orders.cart import Cart
from coleman.products.models import Product
def lookup_object(queryset, object_id=None, slug=None, slug_field=None):
if object_id is not None:
obj = queryset.get(pk=object_id)
elif slug and slug_field:
kwargs = {slug_field: slug}
obj = queryset.get(**kwargs)
else:
raise Http404
return obj
def get_shopping_cart(request, cart_class=Cart):
return request.session.get('cart', None) or cart_class()
def update_shopping_cart(request, cart):
request.session['cart'] = cart
def shopping_cart(request, template_name='orders/shopping_cart.html'):
cart = get_shopping_cart(request)
ctx = {'cart': cart}
return render_to_response(template_name, ctx, context_instance=RequestContext(request))
def add_to_cart(request, queryset, object_id=None, slug=None, slug_field='slug', template_name='orders/add_to_cart.html'):
...
obj = lookup_object(queryset, object_id, slug, slug_field)
quantity = request.GET.get('quantity', 1)
cart = get_shopping_cart(request)
cart.add_item(obj, quantity)
update_shopping_cart(request, cart)
ctx = {'object': obj, 'cart': cart}
return render_to_response(template_name, ctx, context_instance=RequestContext(request))
...
def remove_from_cart(request, cart_item_id, template_name='orders/remove_from_cart.html'):
...
cart = get_shopping_cart(request)
cart.remove_item(cart_item_id)
update_shopping_cart(request, cart)
ctx = {'cart': cart}
return render_to_response(template_name, ctx,
context_instance=RequestContext(request))
def checkout(request, template_name='orders/checkout.html'):
cart = get_shopping_cart(request)
googleCart, googleSig = doGoogleCheckout(cart)
ctx = {'cart': cart,
'googleCart': googleCart,
'googleSig': googleSig,
'googleMerchantKey': settings.GOOGLE_MERCHANT_KEY,
'googleMerchantID': settings.GOOGLE_MERCHANT_ID}
return render_to_response(template_name, ctx, context_instance=RequestContext(request))
И моя страница с описанием товара:
{% block content %}
<h1>{{ object.name }}</h1>
<p>{{ object.description }}</p>
<p>Price: ${{ object.price_in_dollars }}</p>
{% for detail in object.details.all %}
{% if forloop.first %}<p>Additional details:</p>{% endif %}
<li>{{ detail.attribute.name }}: {{ detail.value }}</li>
{% endfor %}
<hr/>
<form action="/orders/cart/add/{{ object.slug }}/" method="POST">{% csrf_token %}
<input name="item_name_1" type="hidden" value="{{ object.name }}"/>
<input name="item_description_1" type="hidden" value="{{ object.description }}"/>
<input name="item_quantity_1" type="hidden" value="1"/>
<input name="item_price_1" type="hidden" value="0.5"/>
<input name="item_currency_1" type="hidden" value="USD"/>
<input name="_charset_" type="hidden" value="utf-8"/>
<input type="submit" value="Add To Cart">
</form>
<p><a href="{% url product_list %}">Back to product list</a></p>
{% endblock %}
Я получаю ошибку:
global name 'Item' is not defined
Exception Location: .../ecommerce_book/coleman/orders/views.py in add_to_cart, line 41
Строка41 в представлении «add_to_cart» относится к «cart.add_item (obj, количество)»
Спасибо.