如何在模型表单中生成 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 的视图,而是基于函数的视图。
我是 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 的视图,而是基于函数的视图。