为了账号安全,请及时绑定邮箱和手机立即绑定

Django:序列化QuerySet并将其发送到模板以与Javascript一起使用

Django:序列化QuerySet并将其发送到模板以与Javascript一起使用

Qyouu 2019-04-11 13:15:01
我有一个QuerySet,我需要将它发送到我的模板,因为我需要操纵它的值来生成一个JS数组。但在我看来,我使用: order_items = json.dumps(order_items)我明白了:Object of type QuerySet is not JSON serializable视图:import jsondef thanks_deposit_payment(request):    order_number = Order.objects.latest('id').id    total = Order.objects.latest('id').total    costo_despacho = Order.objects.latest('id').shipping_cost    order_items = OrderItem.objects.filter(order=Order.objects.latest('id'))    # order_items = json.dumps(order_items)    response = render(request, 'thanks_deposit_payment.html', dict(order_number=order_number, total=total,                                                                   order_items=order_items, costo_despacho=costo_despacho))    return responsemodels.py:class OrderItem(models.Model):    order = models.ForeignKey(Order, on_delete=models.CASCADE)    product = models.CharField(max_length= 200)    quantity = models.CharField(max_length= 200)    size = models.CharField(max_length=200)    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name= 'PEN Price')    file = models.FileField(upload_to='files', blank=True, null=True)    comment = models.CharField(max_length=200, blank=True, null=True, default='')    uploaded_at = models.DateTimeField(auto_now_add=True)    class Meta:        db_table = "OrderItem"我需要使用从后端发送的order_items中的项来生成products数组: <script>        window.dataLayer = window.dataLayer || [];        window.dataLayer.push({            event: 'eec.purchase',            ecommerce: {                currencyCode: 'PEN',                purchase: {                    actionField: {                        id: {{ order_number }},                        affiliation: 'Stickers Gallito E-Commerce',                        revenue: {{ total }},                        shipping: {{ costo_despacho }},                        coupon: 'SUMMER2019'                    }                },                products: [
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您可以使用Django JSON Serializer将queryset转换为JSON String:


from django.core.serializers import serialize

order_items = OrderItem.objects.filter(order=Order.objects.latest('id'))

order_items = serialize('json', order_items, fields=['id', 'product', 'price'])  # the fields needed for products

然后在模板中使用它:


 products: JSON.parse('{{ order_items | safe }}')


查看完整回答
反对 回复 2019-05-17
?
墨色风雨

TA贡献1853条经验 获得超6个赞

试试这个:


def thanks_deposit_payment(request):

 order_number = Order.objects.latest('id').id

 total = Order.objects.latest('id').total

 costo_despacho = Order.objects.latest('id').shipping_cost

 order_items = OrderItem.objects.filter(order=Order.objects.latest('id'))


 return JSONResponse(...here goes the dict with all data to send to view)

甚至,如果你想发送所有这个查询集,你可以在dict中发送一个dict。)稍后,我建议你使用AJAX和JQuery。


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 1254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信