如何正确地从django模型中查询数据而不[关闭]

44u64gxh  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(105)

已关闭此问题为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来处理支付

ukxgm1gy

ukxgm1gy1#

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

相关问题