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

最大功率

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

我尝试弄乱导入语句并使它正常工作,它在尝试编辑变量时给我“ 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]

马特乌斯·斯里斯(Mateusz Slisz)

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章