【问题标题】:<QuerySet [<Address: Shreyash>, <Address: Shreyash>]>": "Order.address" must be a "Address" instance<QuerySet [<Address: Shreyash>, <Address: Shreyash>]>": "Order.address" 必须是 "Address" 实例
【发布时间】:2021-10-09 14:25:06
【问题描述】:

我有与该表单相关的模型,当用户从 go submit 中单击提交按钮并保存在数据库中时,我想要的是,但在这里我得到了错误,所以要实现的是单个地址在其中提交而不是所有地址这与 whit 模型选择字段相关联,所以我知道如何实现这一点

这是我的models.py

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,)
    item = models.ForeignKey(Item, on_delete=models.CASCADE )
    address = models.ForeignKey(Address, on_delete=models.CASCADE)
    price = models.FloatField(blank=False)
    update_at = models.DateTimeField(auto_now=True, editable=False)


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

class Address(models.Model):
    eighteen_choice = {
        ('Yes','Yes'),
        ('No','No')
    }
    phoneNumberRegex = RegexValidator(regex = r"^\d{10,10}$")
    pincodeRegex = RegexValidator(regex = r"^\d{6,6}$")
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address')
    reciever_name = models.CharField(max_length=200, blank=False)
    phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=False)
    alt_phone_no = models.CharField(validators = [phoneNumberRegex], max_length = 10, blank=True)
    state = models.CharField(max_length=50, choices=state_choice, blank=False)
    pincode = models.CharField(validators = [pincodeRegex], max_length = 6, blank=False)
    eighteen = models.CharField(blank=False, choices=eighteen_choice, default='Yes', max_length=4 )
    city = models.CharField(max_length=100, blank=False)
    address = models.CharField(max_length=500, blank=False)
    locality = models.CharField(max_length=300, blank=True)
    joined_date = models.DateTimeField(default=timezone.now,editable=False)
    update_at = models.DateTimeField(auto_now=True)


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

我的意见.py

class Checkout(View):
    def post (self, request,):
        user = request.user
        address = Address.objects.filter(user=request.user)
        ids = (list(request.session.get('cart').keys()))
        items = Item.get_items_by_id(ids)

        for item in items:
            order = Order(user=user, item=item, address=address, price=item.price)
            order.save()
        
        request.session['cart'] = {}

        return redirect('transactions:cart')

我的html

<div class="modal-body">
           <form action="{% url 'transactions:checkout' %}" method="Post">
             {% csrf_token %}
                 #in that i want i want to user select a address instead of all his address 
                    with miltiple choice field
             <input type="submit" class="btn float-right btn-primary" value='Go Ahead'>
           </form>
          </div>

【问题讨论】:

  • 你在使用任何 django 表单吗?如果你这样做,请分享
  • 不,我没有使用 django 表单

标签: django django-models django-forms django-templates django-class-based-views


【解决方案1】:

您必须将一个地址传递给订单,我不知道您将如何检查您将使用哪个地址,但一种简单的方法是选择第一个地址,如下所示:

 order = Order(user=user, item=item, address=address.first(), price=item.price)

或者,如果您有一个默认地址,您可以使用以下内容:

address = Address.objects.filter(user=request.user, default=True)

然后你会得到用户的默认地址,以防你以这种方式定义它。

【讨论】:

  • 所以按照你的说法,没有办法做到这一点
  • 然后你必须把所有的地址放在视图中,让用户选择他想要发送订单的地址。或者以任意方式使用其中一个地址。
  • 我使用了第二个选项,它现在使用选择的默认地址,它的抛出错误无法分配“]>”:“Order.address”必须是“地址” " 实例。
  • 那么你必须在订单中使用address.first()。正如我在这里分享的那样。
猜你喜欢
  • 2021-05-05
  • 1970-01-01
  • 2023-03-30
  • 2014-04-14
  • 1970-01-01
  • 2017-10-09
  • 2016-02-24
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多