已关闭此问题为not reproducible or was caused by typos。它目前不接受回答。
此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我试图创建一个简单的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”的AttributeError对象没有属性“quantity_available”
然而,我已经创建了一个名为投资股份的股份,数量为10万,我不知道我是否足够清楚,伙计们,我还在学习这些东西,希望有人能帮助我。
所以伙计们,我只是想让用户能够买卖股票,我还没有实现支付处理。如果有人有其他方法来解决我的问题,我愿意接受想法,我也计划使用移动的货币API来处理支付
1条答案
按热度按时间ukxgm1gy1#
在您提供的代码中,“share”变量的类型是django.db.models.QuerySet,它没有quantity_available属性。因此,你需要使用.first()或.last()从你的queryset中获取单个对象,或者如果你想更新所有queryset对象的quantity_available值,你可以使用queryset的bulk_update或update()方法。通常,尝试将update()和select_for_update()与F()表达式一起使用,以更有效地更新对象并处理并发请求。