,]>": "Order.address" 必须是 "Address" 实例,django,django-models,django-forms,django-templates,django-class-based-views"/>

首页 > 解决方案 > ,]>": "Order.address" 必须是 "Address" 实例

问题描述

我有与该表单相关的模型,当用户从 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>

标签: djangodjango-modelsdjango-formsdjango-templatesdjango-class-based-views

解决方案


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

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

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

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

然后,您将获得用户的默认地址,以防您以这种方式定义它。


推荐阅读