Как сгенерировать 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 мог обрабатывать модель формы и одновременно заполнять элементы базы данных, нужно использовать не представления на основе классов, а представления на основе функций.