首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Coding
V2EX  ›  Python

请教下, django restframework 做嵌套 JSON,但是二级 JSON 做了 ORM 筛选后显示不全

  •  
  •   Kaco · 90 天前 · 1049 次点击
    这是一个创建于 90 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

    class FoodApiSerializer(serializers.ModelSerializer): image_url = serializers.SerializerMethodField()

    class Meta:
        model = Food
        fields = ('foodid', 'name', 'info', 'price', 'stock', 'image_url', 'num', 'status')
    
    # imagefield 序列化以获取完整的 URL
    def get_image_url(self, Food):
        request = self.context.get('request')
        request = request['request']
        image_url = Food.image.url
        return request.build_absolute_uri(image_url)
    

    class CategoryApiSerializer(serializers.ModelSerializer):

    foods = serializers.SerializerMethodField()
    
    def get_foods(self, obj):
        foods = Food.objects.filter(Q(category=obj.categoryid), Q(status='True'))
    
        if foods is not None and len(foods) > 0:
            for x in foods:
                return FoodApiSerializer(x, context={"request": self.context}).data
        else:
            return ''
    
    class Meta:
        model = Category
        fields = ('categoryid', 'categoryname', 'foods')
        read_only_fields = ('categoryid', 'categoryname', 'foods')
    
    def create(self, validated_data):
        pass
    
    def update(self, instance, validated_data):
        pass
    

    现在 foods 下面的 json,只能显示一条数据,其他都没有 而且只能用 for 来 return FoodApiSerializer(x, context={"request": self.context}).data 或者 FoodApiSerializer(foods[0], context={"request": self.context}).data return FoodApiSerializer(foods, context={"request": self.context}).data 会报错

    10 回复  |  直到 2019-09-15 20:56:55 +08:00
        1
    Kaco   90 天前
    [
    {
    "categoryid": 1,
    "categoryname": "特色菜",
    "foods": {
    "foodid": 1,
    "name": "西蓝花炒牛肉 Tr",
    "info": "西蓝花炒牛肉",
    "price": 13.99,
    "stock": 99999,
    "image_url": "http://0.0.0.0:8000/media/food/2019/09/Recedetangle_21_Copy_8.png",
    "num": 0,
    "status": "True"
    }
    },
    {
    "categoryid": 2,
    "categoryname": "小炒",
    "foods": ""
    },
    {
    "categoryid": 3,
    "categoryname": "粥粉面",
    "foods": ""
    },
    {
    "categoryid": 4,
    "categoryname": "汤品",
    "foods": {
    "foodid": 3,
    "name": "人参汤 Tr",
    "info": "人参汤",
    "price": 9.82,
    "stock": 22222,
    "image_url": "http://0.0.0.0:8000/media/food/2019/09/Rectangle_21_Copy_8.png",
    "num": 0,
    "status": "True"
    }
    },
    {
    "categoryid": 5,
    "categoryname": "围餐",
    "foods": ""
    }
    ]

    每个 foods 分类下只显示一个菜品,其他都没显示
        2
    imzxk   90 天前
    class CategoryApiSerializer(serializers.ModelSerializer):
    foods = serializers.SerializerMethodField()
        3
    imzxk   90 天前
    class CategoryApiSerializer(serializers.ModelSerializer):
    foods = FoodApiSerializer(many=True) def to_representation(self, instance): #这里过滤试试
        4
    Kaco   90 天前
    @imzxk 唔 还是不行....
        5
    Kaco   90 天前
    @imzxk 而且 to_representation 还没用过,我是把之前过滤的代码拉下来用的 不知道对不对
        6
    windfarer   90 天前
    for 里面 return 了可不就出来一个东西就结束了
        7
    Kaco   90 天前
    @windfarer return 也只能返回一个数据,就会中断了
        8
    Kaco   90 天前
    @Kaco FoodApiSerializer 是接收不了一个多个 queryset 对象, 只能接收一个,其他被无视
        9
    Kaco   90 天前
    已经解决...是我漏了一个参数
    return FoodApiSerializer(foods,many=True, context={"request": self.context}).data
    加上 many=True 就可以了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2173 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    ♥ Do have faith in what you're doing.