Django Error : ValueError at / Field 'ticket_id' expected a number but got 'NS000001'

Viewed 38

While Inserting data, I got this error. May be this could be due to change of default primary key. I do not want to enter ticket_id field as I have set default value for that field (default='NS000001')

models.py

class Ticket(models.Model):
    ticket_id = models.AutoField(primary_key=True, default='NS000001', editable=False)
    server_details = models.CharField(max_length=100)
    send_date = models.DateTimeField(default=timezone.now)
    license_no = models.CharField(max_length=25)
    file = models.FileField(upload_to='documents/%Y/%m/%d/')
    
    def __str__(self):
        return self.ticket_id

views.py

def Index(request):
    if request.method == "POST":
        form = SaveTicket(request.POST,request.FILES or None) 
        if form.is_valid():
            form.save()
            print(form)
            return redirect('index')
    else:
        form = SaveTicket()
    return render(request, 'index.html')

forms.py

class SaveTicket(forms.ModelForm):
    class Meta:
        model = Ticket
        fields = ['server_details','send_date','license_no','file']
1 Answers

first

you don't need define Autofield yourself.

class Ticket(models.Model):
    server_details = models.CharField(max_length=100)
    send_date = models.DateTimeField(default=timezone.now)
    license_no = models.CharField(max_length=25)
    file = models.FileField(upload_to='documents/%Y/%m/%d/')

second

If your Ticket ID is static - you can create a property:

class Ticket(models.Model):

    ...  # any staff here

    @property
    def ticket_id(self):
        return f'NS{(self.pk or 0):06d}'

last

after that you can use it everywhere:

print(ticket.ticket_id)
>>>'NS2134154'
Related