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

2024-09-30 05:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从与当前登录用户关联的模型中导入一个变量。我的模型使用与内置用户模型的一对一关系。导入变量后,我想将当前登录的任何用户的变量更改为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/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']
        )
        post = PurchaseHistory(id=InvestingOne)
        post.InvestingOne = True
        post.save()
        return render(request, 'charge.html')

我相信我提供了很好的信息来帮助我解决这个问题。让我知道如果有任何额外的细节,我应该提供。谢谢你

编辑:这是我的文件结构。我认为唯一可能使这变得复杂的是,我的模型在主项目文件夹中,而我的视图在一个名为payments的应用程序中。 [img]https://i.imgur.com/5zs10MI.png[img]


Tags: 用户py模型idtrue编辑modelsrequest
1条回答
网友
1楼 · 发布于 2024-09-30 05:19:38

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

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'

我看到您有抽象模型,不能在查询中使用https://docs.djangoproject.com/en/2.2/topics/db/models/#abstract-base-classes

进行迁移;迁移并进一步

#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<;=1.9用is_authenticated()代替is_authenticated

相关问题 更多 >

    热门问题