Django 在多对多字段中更改选定对象
我有一个订单模型和项目模型,具有多对多关系,但我只想对每个订单的选定项目进行更改,我如何才能做到这一点?当我获得order.items.all时,将影响订单中的所有项目 Model.py:Django 在多对多字段中更改选定对象,django,django-models,django-views,Django,Django Models,Django Views,我有一个订单模型和项目模型,具有多对多关系,但我只想对每个订单的选定项目进行更改,我如何才能做到这一点?当我获得order.items.all时,将影响订单中的所有项目 Model.py: class OrderItem(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True) item = models.ForeignKey
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
item = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ordered = models.BooleanField(default=False)
being_delivered = models.BooleanField(default=False)
being_delivered_date = models.DateTimeField(null=True)
Received = models.BooleanField(default=False)
Received_date = models.DateTimeField(null=True)
def __str__(self):
return f"{self.quantity} of {self.item.product_name}"
class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
items = models.ManyToManyField(OrderItem)
ordered = models.BooleanField(default=False)
being_delivered = models.BooleanField(default=False)
being_delivered_date = models.DateTimeField(null=True)
Received = models.BooleanField(default=False)
Received_date = models.DateTimeField(null=True)
def __str__(self):
return self.user.username
Views.py
def update_to_recevied(request, id):
order_item = get_object_or_404(OrderItem, id=id)
order_item.Received = True
order_item.Received_date = timezone.now()
order_item.save()
return redirect(...)
html:
{order.items.all%中项目的%
{%endfor%}
您可以使用post表单获取所选项目,然后将其发送到views.py,然后将其作为字典重新发送到模板我不确定是否正确理解您的目标,但是如果您只想更新所选项目,可以使用Jquery。使用复选框而不是按钮,为复选框指定id
<input type="checkbox" id="checkbox">Received</input>
已收到
您可以检查是否选中该项目,如下所示:
<script>
$("#checkbox").change(function() {
if(this.checked) {
$.post("{% url 'update_to_recevied' item.id %}", {
received: "True",
},
});
}
});
</script>
$(“#复选框”).change(函数(){
如果(选中此项){
$.post(“{%url'更新\u至\u已接收'item.id%}”{
收到:“正确”,
},
});
}
});
或者简单地使用:选中选择器
您可以在这里查看Jquery Post请求
<script>
$("#checkbox").change(function() {
if(this.checked) {
$.post("{% url 'update_to_recevied' item.id %}", {
received: "True",
},
});
}
});
</script>