一个基于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/[email protected]/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:对象级权限控制

相关推荐
程序员三藏27 分钟前
Selenium三大等待
自动化测试·软件测试·数据库·python·selenium·测试工具·测试用例
闪电麦坤9539 分钟前
SQL:Constraint(约束)
数据库·sql
观无1 小时前
.NET-EFCore基础知识
数据库·.net
^_^ 纵歌1 小时前
mongodb和clickhouse比较
数据库·clickhouse·mongodb
旅行的橘子汽水2 小时前
【C语言-全局变量】
c语言·开发语言·数据库
pwzs2 小时前
缓存不只是加速器:深入理解 Redis 的底层机制
数据库·redis·缓存
A尘埃2 小时前
电商中的购物车(redis的hash类型操作)
数据库·redis·哈希算法
程序员学习随笔3 小时前
PostgreSQL技术内幕28:触发器实现原理
数据库·postgresql
咖啡调调。3 小时前
模板引擎语法-变量
django·sqlite
在下千玦3 小时前
#关于数据库中的时间存储
数据库