Python Django如何在保存到数据库之前连接表单数据
我正在为许多用户构建一个预算web应用程序。用户创建帐户以跟踪不同的值。问题是我无法生成复合键,而需要AccountName作为主键 这是一个挑战。如果用户使用相同的帐户名怎么办?这种情况会发生,因为一些用户可能会开立“现金”账户。我解决这个问题的方法是将数据库中的帐户命名为AccountName+userid。如何将表单中的用户AccountName修改为AccountName+userid 数据库中所需的AccountName示例:Cash1、Cash2 models.pyPython Django如何在保存到数据库之前连接表单数据,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我正在为许多用户构建一个预算web应用程序。用户创建帐户以跟踪不同的值。问题是我无法生成复合键,而需要AccountName作为主键 这是一个挑战。如果用户使用相同的帐户名怎么办?这种情况会发生,因为一些用户可能会开立“现金”账户。我解决这个问题的方法是将数据库中的帐户命名为AccountName+userid。如何将表单中的用户AccountName修改为AccountName+userid 数据库中所需的AccountName示例:Cash1、Cash2 models.py class Ac
class Account(models.Model):
DateCreated = models.DateTimeField()
AccountName = models.CharField(max_length= 100, primary_key=True)
UserID = models.ForeignKey(MyUser, on_delete=models.CASCADE)
Type = models.CharField(max_length= 20)
Balance = models.DecimalField(max_digits=19, decimal_places=8)
Value = models.DecimalField(max_digits=19, decimal_places=8)
Views.py
@login_required
def func_AccountsView(request):
# This filters users accounts so they can only see their own accounts
user_accounts = Account.objects.filter(UserID_id=request.user).all()
if request.method == 'POST':
form = AddAccount(request.POST)
if form.is_valid():
account = form.save(commit=False)
account.UserID = request.user
account.AccountName = AccountName + str(request.user) # WHY DOES THIS NOT WORK?
account.save()
return redirect('accounts')
else:
form = AddAccount()
else:
form = AddAccount()
data = {
'form':form,
'data': user_accounts
}
return render(request, 'NetWorth/accounts.html', data)
forms.py
class AddAccount(forms.ModelForm):
''' This is the form that handles additions of an account '''
class Meta:
model = Account
fields = ['AccountName','DateCreated', 'Type', 'Balance', 'Value']
request.user
将不工作,因为它是一个包含其他字段的对象
另外,由于Eby Sofyan的回答,您的AccountName
变量不代表任何内容
要解决您的问题,请替换
account.AccountName = form.cleaned_data.get('AccountName') + str(request.user.id)
account.AccountName=form.cleaned_data.get('AccountName')+str(request.user.id)
请求。用户将无法工作,因为它是一个包含其他字段的对象
另外,由于Eby Sofyan的回答,您的AccountName
变量不代表任何内容
要解决您的问题,请替换
account.AccountName = form.cleaned_data.get('AccountName') + str(request.user.id)
account.AccountName=form.cleaned_data.get('AccountName')+str(request.user.id)
通过从已清理的\u数据中获取帐户名,然后使用请求.user.pk进行concat,从而从表单输入中获取帐户名。不要忘记将pk
值转换为str
,否则会出现TypeError
异常
....
account.AccountName = form.cleaned_data.get('AccountName') + str(request.user.pk)
account.save()
从表单输入中获取AccountName
,方法是从cleaned_data
中获取,然后使用request.user.pk进行concat。不要忘记将pk
值转换为str
,否则会出现TypeError
异常
....
account.AccountName = form.cleaned_data.get('AccountName') + str(request.user.pk)
account.save()