后端
创建新的子应用
在项目内再创建一个coupons子应用
在项目settings.py文件中注册子应用
在coupons子应用中创建urls.py文件配置路由
然后在coupons自已子应用中编写
编写模型类
生成迁移文件进行迁移
注意外键绑定的表要导入
from django.db import models
from goods.models import SKUS
from users.models import User
# Create your models here.
#优惠券类型
class CouponType(models.Model):
type_name=models.CharField('优惠券类型',max_length=30)
def __str__(self):
return self.type_name
class Meta:
db_table='coupon_type'
#y优惠券
class Coupon(models.Model):
name=models.CharField('优惠券名称',max_length=100)
brief=models.TextField('优惠券介绍',default='')
coupon_type=models.ForeignKey(CouponType,on_delete=models.CASCADE,verbose_name='优惠券类型',null=True,blank=True)
good=models.ForeignKey(SKUS,on_delete=models.CASCADE,verbose_name='商品',null=True,blank=True)
coupon_num=models.IntegerField('数量',default=0)
start_time=models.DateTimeField('开始使用时间')
over_time=models.DateTimeField('结束使用时间')
start_get_time=models.DateTimeField('领券开始时间')
end_get_time=models.DateTimeField('领券结束时间')
remark=models.CharField('备注',max_length=300)
def __str__(self):
return self.name
class Meta:
db_table='coupon'
#优惠券--类型--具体的值
class CouponTypeValue(models.Model):
coupon=models.ForeignKey(Coupon,on_delete=models.CASCADE,verbose_name='优惠券')
coupon_type=models.ForeignKey(CouponType,on_delete=models.CASCADE,verbose_name='优惠券类型')
value=models.IntegerField('优惠券值',default=0)
def __str__(self):
# return '优惠券名-类型-value'
return f'{self.coupon.name}-{self.coupon_type.type_name}-{self.value}'
class Meta:
db_table='coupon_type_value'
#用户领券表
class UserGetCoupon(models.Model):
STATUS=(
(0,'未使用'),
(1,'已使用'),
(2,'已过期')
)
user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')
coupon=models.ForeignKey(Coupon,on_delete=models.CASCADE,verbose_name='优惠券')
status=models.SmallIntegerField('使用状态',default=0,choices=STATUS)
get_time=models.DateTimeField('领券时间',auto_now_add=True)
user_time=models.DateTimeField('使用时间',null=True,blank=True)
def __str__(self):
# return '用户名-优惠券名-使用状态'
return '%s-%s-%s'%(self.user.username,self.coupon.name,self.get_status_display())
class Meta:
db_table='user_get_coupon'
编写序列化器
在子应用创建serializers.py文件
from rest_framework import serializers
from .models import *
class CouponSer(serializers.ModelSerializer):
good_name=serializers.SerializerMethodField(read_only=True)
def get_good_name(self,obj):
if obj.good:
return obj.good.name
else:
return '非单品优惠券'
coupon_type_name=serializers.SerializerMethodField(read_only=True)
def get_coupon_type_name(self,obj):
return obj.coupon_type.type_name
class Meta:
model=Coupon
fields='__all__'
read_only_fields=['id']
# 优惠券类型的序列化器
class CouponTypeSer(serializers.ModelSerializer):
class Meta:
model=CouponType
fields='__all__'
read_only_fields=['id']
编写视图类
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from .models import *
from .serializers import *
from rest_framework.generics import ListAPIView
# Create your views here.
from rest_framework.pagination import PageNumberPagination
class MyPagination(PageNumberPagination):
page_size = 3
max_page_size = 5
page_query_param = 'page'
page_size_query_param = 'pageSize'
# 优惠券的视图
class CouponViewSet(ModelViewSet):
queryset = Coupon.objects.all()
serializer_class = CouponSer
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
pagination_class = MyPagination
#重写destroys删除方法
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
ser = "华为" in obj.name
if not ser:
return Response({"code": 400, "msg": "删除未包含华为"})
obj.delete()
return Response({"code": 200, "msg": "删除成功"})
#重写create方法
def create(self, request, *args, **kwargs):
print(request.data)
name = request.data.get("name")
repe = self.get_queryset().filter(name=name).first()
if repe:
return Response({"code": 400, "msg": "优惠券已存在"})
try:
ser = self.get_serializer(data=request.data)
ser.is_valid()
ser.save()
except Exception as e:
print(e)
return Response({"code": 400, "msg": "创建失败"})
return Response({"code": 201, "msg": "添加成功"})
# 优惠券类型的视图
class CouponTypeAPIView(ListAPIView):
queryset = CouponType.objects.all()
serializer_class = CouponTypeSer
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
配置路由
# from django.contrib import admin
from django.urls import path
from rest_framework import routers
from .views import *
urlpatterns = [
#加载所有的优惠券类型
path('types/',CouponTypeAPIView.as_view())
]
router=routers.SimpleRouter()
router.register('coupon',CouponViewSet)
urlpatterns+=router.urls

1万+

被折叠的 条评论
为什么被折叠?



