I was trying to make an auto-increment for a certain field and don't know the proper way to do it. I am using postgres for administrating my database: I tried the Autofield data type but it didn't work. I guess django is using a default id field and I would like to replace that with my WO_ID field.
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 autoincrement code:
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');
By default, Django gives each model the autoincrement field called id. See https://docs.djangoproject.com/en/2.1/topics/db/models/#automatic-primary-key-fields
If you want to create an extra auto increment field, you can use AutoField https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.AutoField
Create custom id field
class MyModel(models.Model):
wo_id = models.AutoField(primary_key=True)
This skips creation of default id field and creates autoincrement primary field with name wo_id.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With