[英]How to import and edit variable from model associated with currently logged in user
我想從與當前登錄用戶關聯的模型中導入變量。 我的模型與內置的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]
首先,您的模型應如下所示
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.