Python 如何从与当前登录用户关联的模型导入和编辑变量
我想从与当前登录用户关联的模型中导入变量。我的模型使用与内置用户模型的一对一关系。导入变量后,我想将当前登录的任何用户的变量更改为True 我试着弄乱了我的import语句,并使它正常工作。当我试图编辑变量时,它给了我“PurchaseHistory()得到了一个意外的关键字参数'id'”。我知道这是我对在网上找到的代码片段的误解,我希望有人能帮我修复它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
#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。谢谢。我在迁移过程中遇到了一些数据库问题,我会在验证它是否正常工作后将您的答案标记为正确。谢谢你抽出时间,我真的很感激。