【发布时间】:2018-12-17 08:34:14
【问题描述】:
我试图对某个字段进行自动增量,但不知道正确的方法。我正在使用 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
views.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');
【问题讨论】:
-
如果显得过于粗鲁,我真的很抱歉。正如我所指出的,请阅读 PEP8 风格指南。属性名称应使用
snake_case- 所有小写字母,单词除以下划线 (_)。 snake_case 中的单词没有大写。不要在模型类属性中添加前缀 -WO_NightShift应该只是nightshift或night_shift。您已经在类中进行了封装,不需要在属性名称中重复命名空间,这被认为是非常糟糕的做法。 -
您使用
python2还是python3?对于新项目,强烈建议使用python2和 Django 2。在这种情况下,您不应在模型类上定义__unicode__方法,而是使用__str__方法。
标签: django postgresql