django - Django 自动增量字段
问题描述
我试图对某个字段进行自动增量,但不知道正确的方法。我正在使用 postgres 来管理我的数据库:我尝试了 Autofield 数据类型,但它不起作用。我猜 django 正在使用默认的 id 字段,我想用我的 WO_ID 字段替换它。
models.py
class Workorder(models.Model):
WO_ID = models.BigIntegerField(blank=True, primary_key=True)
WO_DateDefWO = models.DateField(default=datetime.now)
WO_DateSched = models.DateField(blank=True, null=True)
WO_DateFinished = models.DateField(blank=True, null=True)
WO_ST_ID_Sign = models.BigIntegerField(blank=True, null=True)
WO_Status_ID = models.BigIntegerField(blank=True, null=True, default=1, choices=STATUS_CHOICES)
WO_Type_ID = models.BigIntegerField(blank=True, null=True, default=1, choices=TYPE_CHOICES)
WO_Comments = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_ID = models.BigIntegerField(blank=True, null=True)
WO_Nav_Kons_ID = models.CharField(max_length=12, blank=True, null=True)
WO_Nav_Name = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_CustAdr = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_Debt = models.FloatField(blank=True, null=True)
WO_Nav_PropCode = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_DepCode = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_PhoneNo = models.CharField(max_length=254, blank=True, null=True)
WO_Nav_ReasonCompl = models.CharField(max_length=254, blank=True, null=True)
WO_NightShift = models.BooleanField(default=False)
WO_Priority = models.BigIntegerField(blank=True, null=True)
WO_RE_ID = models.BigIntegerField(blank=True, null=True)
WO_MapUrl = models.CharField(max_length=254, blank=True, null=True)
def __unicode__(self):
return self.WO_ID
视图.py
from django.shortcuts import render, get_object_or_404, redirect
from django import forms
from django.views.generic import TemplateView
from django.core.serializers import serialize
from django.http import HttpResponse
from MMS.models import Workorder
from MMS import forms
from MMS.forms import CreateWorkorder
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from . import forms
def workorders_list(request):
workorders_all = Workorder.objects.all().values_list('WO_ID', flat=True)
return render(request, "workorders_list.html")
def home_page(request):
return render(request, "home_page.html")
def workorder_create(request):
if request.method == "POST":
form = CreateWorkorder(request.POST)
if form.is_valid():
CreateWorkorder_item = form.save(commit=False)
CreateWorkorder_item.save()
return redirect('/workorder/' + str(CreateWorkorder_item.WO_ID) + '/')
else:
form = CreateWorkorder()
return render(request, 'workorders/workorder_create.html', {'form': form})
def workorder_edit(request, id=None):
item = get_object_or_404(Workorder, WO_ID=id)
form = CreateWorkorder(request.POST or None, instance=item)
if form.is_valid():
form.save()
return redirect('/workorder/' + str(item.WO_ID) + '/')
return render(request, 'workorders/workorder_edit.html', {'form': form})
def workorder(request, id):
workorder = Workorder.objects.get(WO_ID=id)
return render(request, 'workorders/workorder.html', {'workorder': workorder})
postgresql 自动增量代码:
CREATE SEQUENCE public.MMS_workorder_id_seq
INCREMENT 1
START 1
alter table MMS_workorder ALTER COLUMN "WO_ID" SET DEFAULT nextval('MMS_workorder_id_seq');
解决方案
默认情况下,Django 为每个模型提供名为 的自动增量字段id
。请参阅https://docs.djangoproject.com/en/2.1/topics/db/models/#automatic-primary-key-fields
如果要创建额外的自动增量字段,可以使用AutoField
https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.AutoField
创建自定义 id 字段
class MyModel(models.Model):
wo_id = models.AutoField(primary_key=True)
这会跳过默认id
字段的创建,并使用 name 创建自动增量主字段wo_id
。
推荐阅读
- dhcp - ISC DHCP 服务器 - 拒绝池中具有固定地址的已知客户端
- c# - 将 .net core 3.1 web api 发布到远程服务器时出现问题
- google-cloud-platform - Dataproc 集群无法初始化
- java - 捕获布局并将其保存为图像
- python - 如何在 Instaloader 上限制 get_posts() 的数量
- html - 使用 minmax 函数作为宽度时,网格列超出边界
- angular - 如何强制 Angular 材质垫菜单从屏幕角落开始
- java - SUM for LOOP java的结果
- sql - 查询以计算 3 个不同表的总和
- windows - Visual Studio 2019 安装程序在解压后运行,但几秒钟后关闭