django - ,]>": "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>
解决方案
您必须将一个地址传递给订单,我不知道您将如何检查您将使用哪个地址,但一种简单的方法是选择第一个地址,如下所示:
order = Order(user=user, item=item, address=address.first(), price=item.price)
或者,如果您有一个默认地址,您可以使用以下内容:
address = Address.objects.filter(user=request.user, default=True)
然后,您将获得用户的默认地址,以防您以这种方式定义它。
推荐阅读
- javascript - 如何在 Angular 5 中减少供应商/脚本 bundle.js
- python - 向函数添加更多属性:时间和迭代改进
- json - Microsoft Graph 上的 AAD 应用注册
- ansible - Ansible 模块因“没有到主机的路由”而失败
- postgis - Postgis、Hibernate 和 QueryDSL SRID 混合
- android - 带有 WRAP_CONTENT 滚动子项和 CollapsingToolbarLayout 的 Coordinatorlayout
- python - duplicate a single column with several names in Pandas
- java - MacOS 系统上 MySQL Docker 容器 INFILE/ INTO OUTFILE 语句
- python - 从 Python POST 到 AWS Gateway API 到 Dynamodb
- mongodb - 聚合计数数组成员匹配条件