如何在模型表单中生成 10 个唯一数字并在基于 Django Class 的 ListView 中传递表单上下文变量

How can I Generate 10 Unique digits in Model Form and Pass Form Context Variable in Django Class Based ListView

我是 Django Class 基于视图的新手,我正在开发一个项目,在该项目中,我希望在模板上的左侧有用于创建客户帐户的表单,右侧有现有客户列表。 到目前为止,我已经显示了现有客户的列表,但对于表单,我不知道如何将其变量上下文传递给同一模板,或者无法传递将在 ListView 方法中提交的表单。而且我还想在 ModelForm 中生成 10 位数字的唯一帐号,我希望自动填写和禁用表单字段 这是我的表单代码:

import secrets

#我想生成10位数字的账号,但只得到2位数字

account = secrets.randbits(7)

#class 客户账户表格

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 基于视图和 ListViews for Forms 的教程和博客之后,我发现 ListViews 旨在填充模型项,而 FormViews 旨在创建和处理表单,两者都不能在一个模板上使用。尽管许多开发人员通过使用 Multiple Mixin 解决了这个问题,但尚未提及支持或反对他们发现的最佳实践。 在这些情况下,我得出结论,对于能够处理模型表单并同时填充数据库项的 Django 模板,它不需要使用基于 Class 的视图,而是基于函数的视图。