Как сгенерировать 10 уникальных цифр в модели формы и передать контекстную переменную формы в Django Class Based ListView

Я новичок в Django Class Based Views и я работаю над проектом, где в шаблоне я хочу иметь форму для создания счетов клиентов слева и список существующих клиентов справа. Пока что у меня отображается список существующих клиентов, но для формы я не знаю, как передать ее контекст переменной в тот же шаблон, или это невозможно передать форму, которая будет представлена внутри метода ListView. И я также хочу генерировать уникальные номера счетов из 10 цифр в ModelForm, которые я хочу, чтобы поле формы было автоматически заполнено и отключено. Вот код моей формы:

import secrets

#Я хочу сгенерировать номер счета из 10 цифр, но получаю только 2

account = secrets.randbits(7)

#класс для формы счета клиента

class CustomerAccountForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
    super().init(*args, **kwargs)

    self.fields['accountnumber'].initial = account

class Meta:
    model = Customer
    fields = ['accountnumber','surname','othernames','address','phone']

Код для моего представления (ListView)

class CustomerListView(ListView):
    model = Customer
    form_class = CustomerAccountForm
    template_name = 'dashboard/customers.html'
    #Function to get context data from queries
    def get_context_data(self, **kwargs):
        context_data = super().get_context_data(**kwargs)
        #Get Day of today from current date and time
        now = datetime.datetime.now()
        #Get the date today
        date_today = datetime.datetime.now().date
        #Count Number of Withdrawals Today and passing in context
        context_data['count_withdrawals_today'] = Witdrawal.objects.filter(date__year=now.year, date__month=now.month, date__day=now.day).count()
        context_data['count_deposits_today'] = Deposit.objects.filter(date__year=now.year, date__month=now.month, date__day=now.day).count()
        context_data['count_accounts'] = Customer.objects.count()
        context_data['count_users'] = User.objects.count()
        #Calculate today Deposit Today
        context_data['total_deposit']= Deposit.objects.filter(date__year=now.year, date__month=now.month, date__day=now.day).aggregate(total_deposit=Sum('deposit_amount')).get('total_deposit') or 0
        #Calculate today Withdrawal Today
        context_data['total_withdrawal']= Witdrawal.objects.filter(date__year=now.year, date__month=now.month, date__day=now.day).aggregate(total_withdrawal=Sum('withdrawal_amount')).get('total_withdrawal') or 0
        return context_data

Помогите, пожалуйста, как это правильно сделать и чтобы форма была успешно отправлена. Спасибо в ожидании вашего ответа.

secrets.randbits(k) генерирует случайное целое число в диапазоне битов.

Для k=4 тогда Беззнаковое целое число От 0 до 15.

Для k=8 тогда Беззнаковое целое число От 0 до 255.

Для k=16 тогда Беззнаковое целое число От 0 до 65,535, и так далее.

Если вам нужно 10 случайных цифр, то вы можете использовать, например, следующее:

import random

account = "".join(str(random.randint(0, 9)) for _ in range(10))

После просмотра многих учебников и блогов по Django Class Based Views с ListViews для форм, я обнаружил, что ListViews был разработан для заполнения элементов модели, а FormViews предназначен для создания и обработки форм, и оба эти метода не могут быть использованы в одном шаблоне. В этом случае я пришел к выводу, что для того, чтобы шаблон Django мог обрабатывать модель формы и одновременно заполнять элементы базы данных, нужно использовать не представления на основе классов, а представления на основе функций.

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