第一步:创建 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 Userclass 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.nameclass 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, SaleOrderclass ProductForm(forms.ModelForm):class Meta:model = Productfields = '__all__'class PurchaseForm(forms.ModelForm):class Meta:model = PurchaseOrderfields = ['product', 'quantity']class SaleForm(forms.ModelForm):class Meta:model = SaleOrderfields = ['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, SaleFormclass ProductListView(ListView):model = Producttemplate_name = 'erp/product_list.html'context_object_name = 'products'class ProductCreateView(CreateView):model = Productform_class = ProductFormsuccess_url = reverse_lazy('product_list')template_name = 'erp/product_form.html'class PurchaseCreateView(CreateView):model = PurchaseOrderform_class = PurchaseFormsuccess_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.userreturn super().form_valid(form)class SaleCreateView(CreateView):model = SaleOrderform_class = SaleFormsuccess_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.userreturn 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 viewsurlpatterns = [# 商品管理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:对象级权限控制