簡體   English   中英

錢包交易后如何更改用戶和產品(型號)的價值

[英]how can I change the user and the value of product(Model) after wallet transaction

這是我的 model.py,其中 Customer 是下訂單和購買產品的人。

class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=25, null=True)
    phone = models.CharField(max_length=12, null=True)

    def __str__(self):
        return self.name

class Product(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    coinid = models.CharField(max_length=255, null=True)
    digit = models.CharField(max_length=18, null=True)
    ctp = models.FloatField(max_length=100, null=True)
    transection_id = models.IntegerField(null=True, default=0)
    slug = models.SlugField(max_length=250, null=True, blank=True)
    date_created = models.DateField(auto_now_add=True, null=True)

    def __str__(self):
        return self.coinid

    def get_absolute_url(self):
        return reverse("core:detail", kwargs={
        'slug': self.coinid
        })

class Balance(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    balance = models.IntegerField(default=0)

    def __str__(self):
        return self.user.username

在views.py中,這里我想用發件人從錢包發送的金額來替換產品的用戶(Product.user)。

def buy_c(request, ok):
    ctp_val = Product.objects.get(id=ok)
    msg = "Enter Details"
    if request.method == "POST":
        try:
            username = request.POST["username"]
            amount = request.POST["amount"]
            senderUser = User.objects.get(username=request.user.username)
            receiverrUser = User.objects.get(username=username)
            sender = Balance.objects.get(user=senderUser)
            receiverr = Balance.objects.get(user=receiverrUser)
            sender.balance = sender.balance - float(amount)
            receiverr.balance = receiverr.balance + float(amount) 
            
            if senderUser == receiverrUser:
                return Exception.with_traceback()
            else:
                sender.save()
                receiverr.save()
                msg = "Transaction Success"
                return redirect("/user")
    
        except Exception as e:
            print(e)
            msg = "Transaction Failure, Please check and try again"
    
    context = {"coin": ctp_val, "msg":msg}
    return render(request, 'coinwall.html', context)

這是我的模板 coinwall.html:

<tr>
    <th>username</th>
    <th>Coin Id</th>
    <th>current CTP</th>
    <th>Total Transections</th>
</tr>

<tr>
    <td>{{coin.user}}</td>
    <td>{{coin.coinid}}</td>
    <td>{{coin.ctp}}</td>
    <td>{{coin.transection_id}}</td>
</tr>

{% if msg %}
<br><br>
{{msg}}
{% endif %}
<form method="POST">
    <input type="text" name="username" value="{{coin.user}}" readonly><br><br>

    <input type="text" name="amount" value="{{coin.ctp}}" readonly><br><br>
    <input type="submit" value="Submit">
    {% csrf_token %}
</form>

如果有人能告訴我管理員如何跟蹤交易並在余額不足時限制用戶,那也很棒。

在views.py中,這里我想用發件人從錢包發送的金額替換產品的用戶(Product.user)

ctp_val.update(user=receiverrUser)

此外,如果有人可以 (a) 告訴我管理員如何跟蹤交易並 (b) 限制用戶如果超出平衡,那就太好了。 謝謝<3

(a) 您將需要創建一個新表Transaction來跟蹤用戶之間的交換。 類似於(偽 Django-Python 代碼):

class Transaction:
    id = random_generated_hash()
    timestamp = time.now()

    buyer = User
    seller = User
    product = Product
    price = float

然后在每筆交易中,創建一個新的Transaction條目。 然后,您可以 (1) 通過 Django 管理門戶跟蹤交易,或 (2) 創建一個新的僅顯示所有交易的管理員頁面。

(二)

recvbalance = Balance.objects.filter(user=receiverrUser).first()

if recvbalance and recvbalance.balance >= ctp_val.price: # Whatever is the key for 'product price'.
    # Do exchange here.
else:
    # Throw error.

謝謝@Felipe,我確實試過了,

ctp_val.update(user=receiverrUser)

產品價值必須屬性“更新”

然后我嘗試了;

ctp_val.user = senderUser
                ctp_val.save()

它對我有用

在 (a) 中,我想知道如何獲取用戶之間最近的數據/橫斷面詳細信息。 謝謝(b)<3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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