Python 如何从与当前登录用户关联的模型导入和编辑变量

Python 如何从与当前登录用户关联的模型导入和编辑变量,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我想从与当前登录用户关联的模型中导入变量。我的模型使用与内置用户模型的一对一关系。导入变量后,我想将当前登录的任何用户的变量更改为True 我试着弄乱了我的import语句,并使它正常工作。当我试图编辑变量时,它给了我“PurchaseHistory()得到了一个意外的关键字参数'id'”。我知道这是我对在网上找到的代码片段的误解,我希望有人能帮我修复它 #models.py class PurchaseHistory(models.Model): user = models.OneTo

我想从与当前登录用户关联的模型中导入变量。我的模型使用与内置用户模型的一对一关系。导入变量后,我想将当前登录的任何用户的变量更改为True

我试着弄乱了我的import语句,并使它正常工作。当我试图编辑变量时,它给了我“PurchaseHistory()得到了一个意外的关键字参数'id'”。我知道这是我对在网上找到的代码片段的误解,我希望有人能帮我修复它

#models.py
class PurchaseHistory(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    InvestingOne = models.BooleanField(default=False)

    def __str__(self):
        return self.user.username

    class Meta:
        abstract = True
        app_label = 'PurchaseHistory'
我相信我提供了很好的信息来帮助我解决这个问题。让我知道,如果有任何额外的细节,我应该提供。多谢各位

编辑:这是我的文件结构。我认为唯一可能使这一点复杂化的是,我的模型位于主项目文件夹中,而我的视图位于名为payments的应用程序中。
[img]

首先,您的模型应该如下所示

class PurchaseHistory(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="purchase_history")
    is_one_invested = models.BooleanField(default=False)

    def __str__(self):
        return self.user.username

    class Meta:
        app_label = 'PurchaseHistory'
我看到您有抽象模型,不能在查询中使用

进行迁移&迁移并继续

#payments/views.py
def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='usd',
            description='A Django charge',
            source=request.POST['stripeToken']
        )
        if request.user.is_authenticated:
            if PurchaseHistory.objects.filter(user=request.user).exists():
                request.user.purchase_history.is_one_invested = True
                request.user.purchase_history.save()

        return render(request, 'charge.html')
或者如果要创建对象而不是更新

#payments/views.py
def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='usd',
            description='A Django charge',
            source=request.POST['stripeToken']
        )
        if request.user.is_authenticated:
            PurchaseHistory.objects.create(user=request.user, is_one_invested=True)

        return render(request, 'charge.html')

首先,在Django中,您的模型应该如下所示

class PurchaseHistory(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="purchase_history")
    is_one_invested = models.BooleanField(default=False)

    def __str__(self):
        return self.user.username

    class Meta:
        app_label = 'PurchaseHistory'
我看到您有抽象模型,不能在查询中使用

进行迁移&迁移并继续

#payments/views.py
def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='usd',
            description='A Django charge',
            source=request.POST['stripeToken']
        )
        if request.user.is_authenticated:
            if PurchaseHistory.objects.filter(user=request.user).exists():
                request.user.purchase_history.is_one_invested = True
                request.user.purchase_history.save()

        return render(request, 'charge.html')
或者如果要创建对象而不是更新

#payments/views.py
def charge(request):
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=500,
            currency='usd',
            description='A Django charge',
            source=request.POST['stripeToken']
        )
        if request.user.is_authenticated:
            PurchaseHistory.objects.create(user=request.user, is_one_invested=True)

        return render(request, 'charge.html')

在Django中,我忘了提到我将我的模型从我的主项目导入到一个名为payments的应用程序中。导入模型时,views.py的外观如何
从bullorbear.models导入PurchaseHistory
我得到一个错误,
'bool'对象不可调用
当它到达
if request.user.is_authenticated():
所以
InvestingOne
是一个模型,对吗?你可以在这两个模型之间添加一个连接,我仍然不明白你想要实现什么,你能给我看一下你所有的代码吗?我更改了我的代码以完全匹配你的代码。如果相关的话,我可以添加URL和html。我的目标是拥有一个用户配置文件,在购买后,该配置文件的布尔值被标记为true,以便他们可以查看与该布尔值相关的高级内容。请尝试编辑答案,没有看到您使用高于1.9的Django。谢谢。我在迁移过程中遇到了一些数据库问题,我会在验证它是否正常工作后将您的答案标记为正确。谢谢你的时间,我真的很感激。忘了提到我将我的模型从我的主项目导入了一个名为payments的应用程序。导入模型时,views.py的外观如何
从bullorbear.models导入PurchaseHistory
我得到一个错误,
'bool'对象不可调用
当它到达
if request.user.is_authenticated():
所以
InvestingOne
是一个模型,对吗?你可以在这两个模型之间添加一个连接,我仍然不明白你想要实现什么,你能给我看一下你所有的代码吗?我更改了我的代码以完全匹配你的代码。如果相关的话,我可以添加URL和html。我的目标是拥有一个用户配置文件,在购买后,该配置文件的布尔值被标记为true,以便他们可以查看与该布尔值相关的高级内容。请尝试编辑答案,没有看到您使用高于1.9的Django。谢谢。我在迁移过程中遇到了一些数据库问题,我会在验证它是否正常工作后将您的答案标记为正确。谢谢你抽出时间,我真的很感激。