第一步:创建 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
系统功能扩展建议:
-
库存预警:在商品模型中添加预警阈值字段,并在列表页显示库存状态
-
报表统计:使用Chart.js生成销售趋势图
-
权限控制:使用Django的权限系统限制不同用户的操作权限
-
供应商管理:添加Supplier模型并与采购订单关联
-
客户管理:添加Customer模型并与销售订单关联
-
条码支持:集成条形码扫描功能
-
导入导出:使用pandas实现Excel数据导入导出
这个基础版本实现了以下核心功能:
-
商品基本信息管理
-
采购入库(自动增加库存)
-
销售出库(库存校验和扣减)
-
基本操作日志记录(操作时间和操作人)
要完善系统,还需要添加以下内容:
-
订单列表视图
-
数据验证和错误处理
-
分页功能
-
搜索和过滤功能
-
详细的权限管理
-
审计日志
-
数据备份和恢复功能
建议使用以下第三方库增强功能:
-
Django Filter:实现复杂数据过滤
-
Django Import Export:实现数据导入导出
-
Django Tables2:创建更强大的表格视图
-
Django Guardian:对象级权限控制