【发布时间】:2021-01-10 21:19:28
【问题描述】:
我正在使用 Django REST 框架编写 REST API 我想用 Django rest 为咖啡店创建一个购物车,但我不知道如何为我的项目创建视图和 serializers.py。我创建了我的模型和购物车类,但我无法编写 views.py 和 Serializers.py 和 urls.py 请帮助我。
这是我的模型和购物车类:
#models.py
from django.db import models
from coffishop import settings
class Food(models.Model):
name = models.CharField(max_length=100)
price = models.PositiveIntegerField()
type = models.CharField(max_length=50)
info = models.TextField()
image = models.ImageField(upload_to='images/')
def __str__(self):
return self.name
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='orders')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
class Meta:
ordering = ('-created',)
def __str__(self):
return f'{self.user} - {str(self.id)}'
def get_total_price(self):
total = sum(item.get_cost() for item in self.items.all())
class OrderItem(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
product = models.ForeignKey(Food, on_delete=models.CASCADE, related_name='order_items')
price = models.IntegerField()
quantity = models.PositiveSmallIntegerField(default=1)
def __str__(self):
return str(self.id)
def get_cost(self):
return self.price * self.quantity
#cart 类
from menu.models import Food
CART_SESSION_ID = 'cart'
class Cart:
def __init__(self, request):
self.session = request.session
cart = self.session.get(CART_SESSION_ID)
if not cart:
cart = self.session[CART_SESSION_ID] = {}
self.cart = cart
def __iter__(self):
food_ids = self.cart.keys()
foods = Food.objects.filter(id__in=food_ids)
cart = self.cart.copy()
for food in foods:
cart[str(food.id)]['food'] = food
for item in cart.values():
item['total_price'] = int(item['price']) * item['quantity']
yield item
def remove(self, product):
food_id = str(food.id)
if food_id in self.cart:
del self.cart[food_id]
self.save()
def add(self, food, quantity):
food_id = str(food.id)
if food_id not in self.cart:
self.cart[food_id] = {'quantity':0, 'price':str(food.price)}
self.cart[food_id]['quantity'] += quantity
self.save()
def save(self):
self.session.modified = True
def get_total_price(self):
return sum(int(item['price']) * item['quantity'] for item in self.cart.values())
def clear(self):
del self.session[CART_SESSION_ID]
self.save()
【问题讨论】:
标签: python django django-rest-framework