【问题标题】:how to use model attribute in views for another model?如何在另一个模型的视图中使用模型属性?
【发布时间】:2021-10-05 12:27:33
【问题描述】:

所以基本上我有一个模型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)

现在我想知道如何设置金额 = 价格?目前,用户从表单中手动输入金额,但我想将价格传递给此函数,然后将其设置为金额,然后从 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>

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    为了能够将 Product 的 price 属性复制到 Main 的 amount 属性,您的表单必须将正在购买的产品的 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多