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