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.