如何正确从 django 模型查询数据而不需要

问题描述 投票:0回答:1

我正在尝试创建一个简单的 django 应用程序来买卖股票,但我无法正确查询我的数据,特别是可用股票的数量。 这些是我的模型:

from django.db import models
from accounts.models import CustomUser

class Share(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    quantity_available = models.PositiveIntegerField()
    
    def __str__(self):
        return self.name


class Transaction(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    share = models.ForeignKey(Share, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()
    total_price = models.DecimalField(max_digits=10, decimal_places=2)
    transaction_date = models.DateTimeField(auto_now_add=True)
    is_purchase = models.BooleanField()

那么这些是我的观点:

from django.shortcuts import render, redirect
from .models import Share, Transaction
from .forms import BuyShareForm, SellShareForm

def buy_share(request):
    share = Share.objects.filter(quantity_available__gt=100)
    form = BuyShareForm(request.POST or None)
            
    if request.method == 'POST' and form.is_valid():
        quantity = form.cleaned_data['quantity']
        
        if quantity <= share.quantity_available:
            transaction = Transaction(user=request.user, share=share, quantity=quantity,
                                      total_price=quantity * share.price, is_purchase=True)
            transaction.save()
            share.quantity_available -= quantity
            share.save()
            return redirect('shares:buy-success')
        else:
            form.add_error('quantity', 'Insufficient shares available')
            
    context = {
        'share': share,
        'form': form,
    }

    return render(request, 'shares/buy_share.html', context)

def sell_share(request):
    share = Share.objects.all()
    form = SellShareForm(request.POST or None)

    if request.method == 'POST' and form.is_valid():
        quantity = form.cleaned_data['quantity']
        
        transaction = Transaction(user=request.user, share=share, quantity=quantity,
                                  total_price=quantity * share.price, is_purchase=False)
        transaction.save()
        share.quantity_available += quantity
        share.save()
        return redirect('shares:sell_success')

    return render(request, 'shares:sell_share.html', {'form': form})

当我尝试使用“share = Share.objects.filter(quantity_available__gt=100)”获取可用共享时,只会出现错误:

/shares/buy_share/ 出现属性错误 “QuerySet”对象没有属性“quantity_available”

但我已经创建了一种称为投资股的股票,数量为 100,000 我不知道我说得够清楚吗各位 我还在学习这些东西 希望有人帮忙

所以我只是希望用户能够买卖股票,我还没有实现支付处理。如果有人对我的问题有其他方法,我愿意接受想法,我也计划使用移动货币 API 来处理支付

python django django-queryset payment
1个回答
0
投票

在您提供的代码中,“share”变量的类型为 django.db.models.QuerySet,并且没有属性Quantity_available。因此,您需要使用 .first() 或 .last() 从查询集中获取单个对象,或者如果您想更新所有查询集对象的Quantity_available值,您可以使用bulk_update或update()方法查询集。一般来说,尝试将 update() 和 select_for_update() 与 F() 表达式一起使用,可以更有效地更新对象并处理并发请求。

© www.soinside.com 2019 - 2024. All rights reserved.