Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django如何在保存到数据库之前连接表单数据_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python Django如何在保存到数据库之前连接表单数据

Python 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

我正在为许多用户构建一个预算web应用程序。用户创建帐户以跟踪不同的值。问题是我无法生成复合键,而需要AccountName作为主键

这是一个挑战。如果用户使用相同的帐户名怎么办?这种情况会发生,因为一些用户可能会开立“现金”账户。我解决这个问题的方法是将数据库中的帐户命名为AccountName+userid。如何将表单中的用户AccountName修改为AccountName+userid

数据库中所需的AccountName示例:Cash1、Cash2

models.py

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()