Django CreateView Попытка зарегистрировать клиента С определенным номером, который идет от 15 до 15

Я пытаюсь сделать небольшую систему, в которой я должен поместить номер клиента, который идет от 15 до 15, но правда в том, что мне не удалось изменить глобальную переменную.

Я пытаюсь узнать, как работают представления на основе классов.

Надеюсь, вы сможете мне помочь.

Мне нужно найти последнюю запись в базе данных и добавить к ней 15.

Спасибо.

models.py

from django.db import models

# Create your models here.
class Customer(models.Model):
    name = models.CharField(max_length=50)
    customer_num = models.IntegerField(unique=True)

    def __str__(self):
        return self.name

views.py

from re import template
from django.shortcuts import render
from aplicacion.models import *
from django.views.generic import *
from django.http import HttpResponse
# Create your views here.

class CreateCustomer(CreateView):
    model = Customer
    template_name = 'createcustomer.html'
    fields = ['name']
    success_url = "/admin/aplicacion/customer/"

    aa = Customer.objects.last().customer_num
    def form_valid(self, form):
        global aa
                
        while True:
            
            try:
                Customer = form.save(commit=False)
                Customer.customer_num = self.aa
                print(self.aa, "jjjj")
                """If the form is valid, save the associated model."""
                #form.instance.customer_num = self.request.POST['name']
                break
                aa = self.aa + 15

            except:    
                pass            

        return super().form_valid(form)

        

нет необходимости в глобальной или какой-либо "фантазии".

определите простую функцию, желательно в view-файле после импорта вашей модели:

def get_new_customer_num():
    from django.db.models import Max
    biggestNumber = Customer.objects.aggregate(Max('customer_num')["customer_num__max"]
    return biggestNumber+15

Вызывайте эту функцию везде, где вам нужен новый номер клиента, например

customer_num = get_new_customer_num()

Я бы предложил, чтобы префикс "первая буква имени" и т.д. использовался только при отображении, так что вам придется иметь дело только с уникальными номерами, это быстрее и проще... Для отображения вы могли бы создать функцию для модели (например, функцию str()-), вычисляющую красивый номер клиента, например jd_21375 для клиента John/Jane Doe.

Вернуться на верх