问题描述
这是我的 model.py,其中客户是下订单和购买产品的人。
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,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) 限制用户,那就太好了。谢谢
(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) 创建一个新的仅管理员页面,显示所有交易。
(b)
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)