【问题标题】:how to fetch data from many to many field objects?如何从多对多的字段对象中获取数据?
【发布时间】:2019-09-18 18:34:58
【问题描述】:

我在我的模型中遇到了多对多的字段对象我想从订单模型对象中检索产品的价格,但是在获取它时有时会出现许多相关的管理器错误或查询集错误

models.py

from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User

class Product(models.Model):
    name = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    available = models.BooleanField(default=True)
    stock = models.PositiveIntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)



class Order(models.Model):
    user = models.ForeignKey(User,on_delete= models.SET_NULL,null = True)
    product = models.ManyToManyField('Order.Product')
    is_ordered = models.BooleanField(default =False)
    date_ordered = models.DateTimeField(auto_now = True,null = True)

views.py

def get_product_price(request):
    if request.method=="GET":
        user=User.objects.get(username = "hemant")
        orders = user.order_set.all()
        order = orders[0]   
        price = order.product.price
        return HttpResponse(price)

【问题讨论】:

    标签: django django-models django-views many-to-many


    【解决方案1】:

    当您从ManyToManyField 获得价值时,您需要这样做:

    products = order.product.all()
    

    如果你想得到价格,你可以这样做:

    products = order.product.all()
    for product in products:
        print(product.price)
    

    如果您想将价格作为 http 响应返回,那么您可以使用 values_list() 从查询集中获取价格列表。像这样

    import json
    
    
    views.py
    def get_product_price(request):
        if request.method=="GET":
            user=User.objects.get(username = "hemant")
            orders = user.order_set.all()
            order = orders[0]   
            price = list(order.product.all().values_list('price', flat=True))
            return HttpResponse(json.dumps(price))
    

    【讨论】:

      猜你喜欢
      • 2012-10-31
      • 2018-02-28
      • 2017-12-12
      • 2022-01-22
      • 1970-01-01
      • 2019-09-19
      • 2020-05-05
      • 2015-01-24
      相关资源
      最近更新 更多