前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.寻光集后台管理系统-产品信息(后端)

11.寻光集后台管理系统-产品信息(后端)

作者头像
zx钟
发布2022-12-02 16:08:50
3600
发布2022-12-02 16:08:50
举报
文章被收录于专栏:测试游记测试游记

从需求分析中可以看出,业务基本上是围绕着「产品」的

  • 订单中的伴手礼是由多个产品组成
  • 库存中的入库和出库的也是某一个产品

产品应用

创建产品应用

代码语言:javascript
复制
python -m manage.py startapp product

将新建的product文件夹移动到apps文件夹下

注册产品应用

backend/LightSeeking/settings.pyINSTALLED_APPS中注册新建的「产品」应用

代码语言:javascript
复制
INSTALLED_APPS = [
    ...
    'users.apps.UsersConfig',
    'product.apps.ProductConfig',
]

编写产品表结构

编写通用表结构

在全部业务相关的表中有几个通用的字段

  • 主键
  • 创建时间
  • 更新时间
  • 是否逻辑删除

提取到backend/utils/models.py

代码语言:javascript
复制
from django.db import models


class BaseModel(models.Model):
    """
    基类,公共字段
    """
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    c_time = models.DateTimeField('创建时间', auto_now_add=True)
    u_time = models.DateTimeField('更新时间', auto_now=True)
    is_delete = models.BooleanField('逻辑删除', default=False)

    class Meta:
        # 抽象类,用于继承,迁移时不会创建
        abstract = True

使用abstract = True后这个表结构就是一个表结构的基类了,其他表的创建就可以继承它了

产品表结构

产品包含了

  • 货品编码
  • 类别
  • 品牌
  • 品名
  • 产品单价
  • 样图
  • 备注
代码语言:javascript
复制
from django.db import models
from utils.models import BaseModel


class Product(BaseModel):
    product_id = models.CharField('货品编码', max_length=, unique=True, help_text='货品编码')
    category = models.CharField('类别', max_length=, null=True, blank=True, default='', help_text='类别')
    brand = models.CharField('品牌', max_length=, null=True, blank=True, default='', help_text='品牌')
    name = models.CharField('品名', max_length=, null=True, blank=True, default='', help_text='品名')
    price = models.DecimalField('产品单价', max_digits=, decimal_places=, default=, help_text='产品单价')
    sample_png = models.CharField("样图", max_length=, null=True, blank=True, default='', help_text='样图')
    desc = models.CharField('备注', max_length=, null=True, blank=True, default='', help_text='备注')

    class Meta:
        db_table = 'tb_product'
        verbose_name = '产品信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.product_id

数据迁移

代码语言:javascript
复制
python manage.py makemigrations
python manage.py migrate

查看表结构

产品序列化器

  • 创建时间这个字段在新建的时候不需要暴露,只有查询的时候才用到,所以使用read_only
  • 逻辑删除字段是内部使用的,对外删除了就不可见了,所以暴露字段的时候排除is_delete
代码语言:javascript
复制
from rest_framework import serializers
from product.models import Product


class ProductModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        exclude = ('is_delete',)
        extra_kwargs = {
            'c_time': {
                'read_only': True
            }
        }

产品视图

代码语言:javascript
复制
from rest_framework.viewsets import ModelViewSet

from product.models import Product
from product.serializers import ProductModelSerializer
from utils.pagination import TenItemPerPagePagination


class ProductViewSet(ModelViewSet):
    queryset = Product.objects.filter(is_delete=False).order_by("-c_time")
    serializer_class = ProductModelSerializer
    pagination_class = TenItemPerPagePagination
  • 对外展示的时候排除被逻辑删除的数据,也就是is_delete=False
  • 排序根据创建时间倒序

产品路由

backend/apps/product/urls.py

代码语言:javascript
复制
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from product import views

router = DefaultRouter()
router.register("product", views.ProductViewSet)
urlpatterns = [
    path('', include(router.urls))
]

backend/LightSeeking/urls.py

代码语言:javascript
复制
...
urlpatterns = [
    ...
    path('', include('product.urls')),
]

测试

访问http://127.0.0.1:8000/product/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 产品应用
    • 创建产品应用
      • 注册产品应用
        • 编写产品表结构
          • 编写通用表结构
          • 产品表结构
        • 数据迁移
          • 查看表结构
          • 产品序列化器
          • 产品视图
          • 产品路由
          • 测试
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档