簡體   English   中英

如何從與當前登錄用戶關聯的模型中導入和編輯變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM