Как можно автоматически увеличить серийный номер, когда пользователь регистрируется, и я хочу удалить контент после заполнения нескольких мест? - PullRequest
0 голосов
/ 04 марта 2020

Как я получу прирост серийного номера сразу после ввода нового регистра? Как автоматически отключить регистрацию при заполнении мест? Теперь я хочу увеличить число на 1 для каждого регистра.

Forms.py

from django import forms
    from django.contrib.auth import authenticate, login
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User

    CHOICES = [
        ('',''),
        ('CT', 'Computer Technology'),
        ('BCA', 'Bachelor of Computer Application'),
        ('SS', 'Software Systems'),
        ('CS','Computer Science'),
        ('IT','Information Technology'),
        ('DA','Data Analytics'),
    ]
    COURSE = [
        ('',''),
        ('Python','Python'),
        ('Java','Java'),
        ('C++','C++'),
    ]
    class Registerform(UserCreationForm):
        username = forms.CharField(label="Roll No",help_text="Enter Valid RollNo")
        name = forms.CharField(label="Candidate Name", max_length=150)
        dob = forms.DateField(label="Date of Birth",help_text="MM/DD/YY")
        email = forms.EmailField(help_text="Enter valid Mail")
        department=forms.CharField( label="Department", widget=forms.Select(choices=CHOICES))
        edc = forms.CharField( label="EDC", widget=forms.Select(choices=COURSE))
        password1 = None
        password2 = None

        class Meta:
            model = User
            fields = ["username","name", "dob", "email","department","edc"]

Models.py

from django.db import models
from django.utils.translation import gettext as _
# Create your models here.
class listing(models.Model):
    username = models.CharField(max_length=150)
    name = models.CharField(max_length=150)
    dob = models.DateField()
    email = models.EmailField()
    department=models.CharField(max_length=150 )
    edc = models.CharField(max_length=300,default="")
    password1=None
    password2=None

    def __str__(self):
        return self.username

Я хочу показать мой серийный номер (он хочет увеличиваться автоматически) здесь, как я могу это сделать?

I want to show my serial number(It want to incremented automatically) here how can I do this?

Серийный номер также хотите, чтобы автоматически сохранять в базе данных. enter image description here

ОСНОВНОЕ НА ВЕБ-САЙТЕ ПОСЛЕ ЗАПОЛНЕНИЯ 60 ПОЛЬЗОВАТЕЛЕЙ, КОТОРЫЕ ХОЧУ ОТКЛЮЧИТЬ АВТОМАТИЧЕСКИ. Как можно?

Я не очень хорош в английском sh, если вопрос не ясен, просто напишите мне, потому что я хочу завершить этот проект, я новый django пользователь

1 Ответ

0 голосов
/ 04 марта 2020

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

Затем вам необходимо:

  • Начать транзакцию базы данных с уровнем изоляции REPEATABLE READ или SERIALIZABLE.
  • Проверьте зачисление в класс.
    • Если класс заполнен ROLLBACK транзакцией и сообщить об этом пользователю.
  • Создать регистрационную запись. (Теперь у вас есть серийный номер, либо из поля автоинкремента, либо введя его самостоятельно.)
  • Обновите количество участников курса.
  • COMMIT транзакция.

Использование транзакций гарантирует, что две регистрации не будут «гоняться» за обновлением одного и того же курса. Если вы COMMIT сделка, все, что вы сделали на самом деле происходит. Если вы ROLLBACK, ничего на самом деле не произошло. Таким образом, вы знаете, что количество будет правильным, потому что вставка новой записи и обновление счета будет происходить мгновенно ... "атомно".

Вы также должны используйте транзакции (Django может сделать это для вас автоматически), пока вы читаете базу данных, например, чтобы увидеть, заполнен ли курс. Хотя вы ничего не изменяете и не блокируете, это гарантирует, что вы всегда читаете самую свежую информацию, зная, что logi c, который может обновлять базу данных, также использует транзакции.

Я не Я попытаюсь написать этот Django код для вас, но на самом деле он довольно прост.

...