一个基于Django的进销存管理系统Demo实现

第一步:创建 Django 项目

bash

复制

复制代码
django-admin startproject inventory_system
cd inventory_system
python manage.py startapp erp

第二步:定义数据模型(models.py)

python

复制

复制代码
from django.db import models
from django.contrib.auth.models import User

class Product(models.Model):
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=20, unique=True)
    category = models.CharField(max_length=50)
    specification = models.TextField(blank=True)
    purchase_price = models.DecimalField(max_digits=10, decimal_places=2)
    selling_price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.IntegerField(default=0)

    def __str__(self):
        return self.name

class PurchaseOrder(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    order_date = models.DateTimeField(auto_now_add=True)
    operator = models.ForeignKey(User, on_delete=models.CASCADE)

class SaleOrder(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    order_date = models.DateTimeField(auto_now_add=True)
    operator = models.ForeignKey(User, on_delete=models.CASCADE)

第三步:创建表单(forms.py)

python

复制

复制代码
from django import forms
from .models import Product, PurchaseOrder, SaleOrder

class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'

class PurchaseForm(forms.ModelForm):
    class Meta:
        model = PurchaseOrder
        fields = ['product', 'quantity']

class SaleForm(forms.ModelForm):
    class Meta:
        model = SaleOrder
        fields = ['product', 'quantity']

第四步:编写视图(views.py)

python

复制

复制代码
from django.shortcuts import render, redirect
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Product, PurchaseOrder, SaleOrder
from .forms import ProductForm, PurchaseForm, SaleForm

class ProductListView(ListView):
    model = Product
    template_name = 'erp/product_list.html'
    context_object_name = 'products'

class ProductCreateView(CreateView):
    model = Product
    form_class = ProductForm
    success_url = reverse_lazy('product_list')
    template_name = 'erp/product_form.html'

class PurchaseCreateView(CreateView):
    model = PurchaseOrder
    form_class = PurchaseForm
    success_url = reverse_lazy('purchase_list')
    template_name = 'erp/order_form.html'

    def form_valid(self, form):
        # 更新库存
        product = form.cleaned_data['product']
        product.stock += form.cleaned_data['quantity']
        product.save()
        form.instance.operator = self.request.user
        return super().form_valid(form)

class SaleCreateView(CreateView):
    model = SaleOrder
    form_class = SaleForm
    success_url = reverse_lazy('sale_list')
    template_name = 'erp/order_form.html'

    def form_valid(self, form):
        # 检查库存并更新
        product = form.cleaned_data['product']
        if product.stock >= form.cleaned_data['quantity']:
            product.stock -= form.cleaned_data['quantity']
            product.save()
            form.instance.operator = self.request.user
            return super().form_valid(form)
        else:
            form.add_error('quantity', '库存不足')
            return self.form_invalid(form)

第五步:配置 URLs(urls.py)

python

复制

复制代码
from django.urls import path
from erp import views

urlpatterns = [
    # 商品管理
    path('products/', views.ProductListView.as_view(), name='product_list'),
    path('products/add/', views.ProductCreateView.as_view(), name='product_add'),
    
    # 采购管理
    path('purchases/add/', views.PurchaseCreateView.as_view(), name='purchase_add'),
    
    # 销售管理
    path('sales/add/', views.SaleCreateView.as_view(), name='sale_add'),
]

第六步:创建模板(示例模板:product_list.html)

html

复制

复制代码
<!DOCTYPE html>
<html>
<head>
    <title>商品列表</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container mt-4">
        <h2>商品列表</h2>
        <a href="{% url 'product_add' %}" class="btn btn-primary mb-3">新增商品</a>
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>名称</th>
                    <th>编码</th>
                    <th>库存</th>
                    <th>采购价</th>
                    <th>销售价</th>
                </tr>
            </thead>
            <tbody>
                {% for product in products %}
                <tr>
                    <td>{{ product.name }}</td>
                    <td>{{ product.code }}</td>
                    <td>{{ product.stock }}</td>
                    <td>{{ product.purchase_price }}</td>
                    <td>{{ product.selling_price }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>
    </div>
</body>
</html>

运行 HTML

第七步:运行迁移并创建管理员

bash

复制

复制代码
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

第八步:运行开发服务器

bash

复制

复制代码
python manage.py runserver

系统功能扩展建议:

  1. 库存预警:在商品模型中添加预警阈值字段,并在列表页显示库存状态

  2. 报表统计:使用Chart.js生成销售趋势图

  3. 权限控制:使用Django的权限系统限制不同用户的操作权限

  4. 供应商管理:添加Supplier模型并与采购订单关联

  5. 客户管理:添加Customer模型并与销售订单关联

  6. 条码支持:集成条形码扫描功能

  7. 导入导出:使用pandas实现Excel数据导入导出

这个基础版本实现了以下核心功能:

  • 商品基本信息管理

  • 采购入库(自动增加库存)

  • 销售出库(库存校验和扣减)

  • 基本操作日志记录(操作时间和操作人)

要完善系统,还需要添加以下内容:

  1. 订单列表视图

  2. 数据验证和错误处理

  3. 分页功能

  4. 搜索和过滤功能

  5. 详细的权限管理

  6. 审计日志

  7. 数据备份和恢复功能

建议使用以下第三方库增强功能:

  • Django Filter:实现复杂数据过滤

  • Django Import Export:实现数据导入导出

  • Django Tables2:创建更强大的表格视图

  • Django Guardian:对象级权限控制

相关推荐
李纲明25 分钟前
WordPress 提示「建立数据库连接时出错」:先核 wp-config 与数据库服务,再查表损坏与磁盘配额
数据库·wordpress·devdiy
freejackman32 分钟前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
杨云龙UP35 分钟前
TDengine 社区版磁盘空间不足故障处理 SOP:历史日志清理、日志保留策略及数据保留 200 天
数据库·时序数据库·tdengine·tsdb·历史日志清理·trim database·logkeepdays
betazhou1 小时前
MySQL Oracle官方备份工具
数据库·mysql·oracle
一万年太久。1 小时前
mysql主从复制
数据库·mysql
车载中间件通信1 小时前
[TC8测试]TCP_FLAGS_PROCESSING_06
数据库·网络协议·tcp/ip·中间件·tc8
呆萌很1 小时前
达梦数据库(DM)和MySQL核心区别
数据库
l1t1 小时前
DeepSeek总结的pgrust以光速编程:构建 Gravity 查询引擎
数据库·人工智能·postgresql
木木_Q4057733492 小时前
Oracle 增量同步配置指南:只搬变了的数据,不重复也不漏数
数据库·oracle·数据同步·数据库同步·增量同步
升鲜宝供应链及收银系统源代码服务2 小时前
Java Spring Boot 商业版 升鲜宝供应链管理系统--商品模块表与字段分析(商品管理页面业务逻辑与数据表关系分析)
数据库·生鲜配送系统排名·生鲜配送系统架构设计·b2b订货商城解决方案·生鲜配送系统源代码出售·生鲜配送系统设计源代码