Как использовать атрибут модели в представлениях для другой модели?
В общем, у меня есть модель Product
, у которой есть атрибут цены, как показано ниже.
class Product(models.Model):
name = models.CharField(max_length=200, unique=True)
description = models.TextField(max_length=500, blank=True)
price = models.IntegerField()
image = models.ImageField(upload_to = 'photos/products')
stock = models.IntegerField()
is_available = models.BooleanField(default=True)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
И у меня есть эта модель Main
, которую я делаю для платежей, как вы можете видеть, там также есть атрибут суммы:
class Main(models.Model):
user = models.ForeignKey(Account, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=200, null=True)
email = models.EmailField(max_length=200, null=True)
phone = models.CharField(max_length=200, null=True)
order_id = models.TextField()
payment_id = models.TextField()
amount = models.IntegerField()
date = models.TextField(default='-')
card_number = models.TextField(default="****")
idpay_track_id = models.IntegerField(default=0000)
bank_track_id = models.TextField(default=0000)
status = models.IntegerField(default=0)
def __str__(self):
return str(self.name)
Теперь я хочу знать, как установить amount = price? Сейчас пользователь вводит сумму вручную из формы, но я хочу передать цену в эту функцию и затем установить ее в amount, а затем удалить ввод amount из HTML
def payment_start(request):
if request.method == 'POST':
order_id = uuid.uuid1()
amount = request.POST.get('amount')
name = request.POST.get('name')
email = request.POST.get('mail')
phone = request.POST.get('phone')
payer = {
'name': request.POST.get('name'),
'phone': request.POST.get('phone'),
'mail': request.POST.get('mail'),
'desc': request.POST.get('desc'),
}
record = Main(order_id=order_id, amount=int(amount), name=name, email=email, phone=phone, user=request.user)
record.save()
idpay_payment = payment_init()
result = idpay_payment.payment(str(order_id), amount, 'orders/payment/return', payer)
if 'id' in result:
record.status = 1
record.payment_id = result['id']
record.save()
return redirect(result['link'])
else:
txt = result['message']
else:
txt = "Bad Request"
return render(request, 'error.html', {'txt': txt})
Это HTML
<form action="{%url 'payment_start' %}" method="POST">
{% csrf_token %}
<input style="width: 100%;" type="number" name="amount" placeholder="Amount" required>
<br/> <br/>
<input style="width: 100%;" type="text" name="name" placeholder="Name" required>
<br/> <br/>
<input style="width: 100%;" type="text" name="phone" placeholder="Phone">
<br/> <br/>
<input style="width: 100%;" type="mail" name="mail" placeholder="MAil">
<br/> <br/>
<input style="width: 100%;" type="text" name="desc" placeholder="Description">
<br/> <br/>
<button style="width: 100%;" type="submit" class="btn btn-primary">Start Payment</button>
</form>
Чтобы иметь возможность копировать атрибут цены Product в атрибут суммы Main, ваша форма должна передать id покупаемого продукта вместе с данными формы. Затем вы могли бы запросить модель в функции payment_start:
product_id = request.POST.get('product_id')
product = Product.objects.get(id=product_id)
record = Main(order_id=order_id, amount=product.price, name=name, email=email, phone=phone, user=request.user)
record.save()