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