简体   繁体   English

如何在django rest框架中获取所有字段,该框架在带有外键的不同模型中被定义为相关名称?

[英]How to get all fields in django rest framework which is defined as related name in a diffent model with foreign key?

Here is my models.py 这是我的models.py

from __future__ import unicode_literals
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=200)
    company_name = models.ForeignKey('Company',on_delete=models.CASCADE,related_name='user')

    def __str__(self):
        return self.name

class Company(models.Model):
    name = models.CharField(max_length=200)
    phone_number = models.IntegerField(null=True,blank=True)

    def __str__(self):
        return self.name

class Catalog(models.Model):
    name = models.CharField(max_length=200)
    no_of_pcs = models.IntegerField(null=True,blank=True)
    per_piece_price = models.DecimalField(null=True,blank=True,max_digits=10,decimal_places=2)
    company_name = models.ForeignKey(Company,on_delete=models.CASCADE,related_name='catalog')

    def __str__(self):
        return self.name

here is my serializers.py 这是我的serializers.py

from rest_framework import serializers
from .models import *
from django.db.models import Sum,Count

class CatalogSerializer(serializers.ModelSerializer):
    total_pieces = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    company_name = serializers.CharField()

    class Meta:
        model = Catalog
        fields = ('name','no_of_pcs','per_piece_price','company_name','total_pieces','total_price')

    def get_total_pieces(self, obj):
        totalpieces = Catalog.objects.aggregate(total_pieces=Count('no_of_pcs'))
        return totalpieces["total_pieces"]

    def get_total_price(self, obj):
        totalprice = Catalog.objects.aggregate(total_price=Sum('per_piece_price'))
        return totalprice["total_price"]

class UserSerializer(serializers.ModelSerializer):
    company_name = serializers.CharField()
    class Meta:
        model = User
        fields = '__all__'

class CatalogData(serializers.ModelSerializer):
    class Meta:
        model = Catalog
        fields = ('name', 'no_of_pcs', 'per_piece_price')


class CompanySerializer(serializers.ModelSerializer):
    catalog = CatalogData(many=True)
    user = UserSerializer(many=True)
    class Meta:
        model = Company
        fields = ('name', 'phone_number', 'catalog','user')

here is my views.py 这是我的views.py

from __future__ import unicode_literals
from django.http import HttpResponse
from .models import *
import json
from django.http import JsonResponse, HttpResponse
from .serializers import *
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework import viewsets


class CatalogView(viewsets.ModelViewSet):
    queryset =  Catalog.objects.select_related('company_name')
    serializer_class = CatalogSerializer

class CompanyView(viewsets.ModelViewSet):
    queryset =  Company.objects.all()
    serializer_class = CompanySerializer

class UserView(viewsets.ModelViewSet):
    queryset =  User.objects.all()
    serializer_class = UserSerializer

I am getting api like this.. 我正在获得这样的api。

[
    {
        "name": "sarees",
        "no_of_pcs": 23,
        "per_piece_price": "33333.00",
        "company_name": "google",
        "total_pieces": 3,
        "total_price": 471118.0
    }
]

Here i am getting only company name for Company Model. 在这里,我仅获得公司模型的公司名称。 but i am expecting all the fields name of the same company. 但我期望同一公司的所有字段名称。

But i am expecting output-- 但是我期望输出-

like this: 像这样:

[
    {
        "name": "sarees",
        "no_of_pcs": 23,
        "per_piece_price": "33333.00",
        "company": [
                {
                    "name": "google",
                    "phone_number": 323232
                }
            ],
        "total_pieces": 3,
        "total_price": 471118.0
    }
]

I wants to achive all the company fields. 我想实现公司的所有领域。 with sub list inside same api 与相同的API内的子列表

thanks, 谢谢,

You can use nested serializer for this. 您可以为此使用嵌套序列化器。 Change your serializer to this: 将序列化器更改为此:

class CompanySerializer(serializers.ModelSerializer):
    catalog = CatalogData(many=True)
    user = UserSerializer(many=True)
    class Meta:
        model = Company
        fields = ('name', 'phone_number', 'catalog','user')

class CatalogSerializer(serializers.ModelSerializer):
    total_pieces = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    company = CompanySerializer(source='company_name') 

    class Meta:
        model = Catalog
        fields = ('name','no_of_pcs','per_piece_price','company','total_pieces','total_price')
        depth = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Django Rest 框架:如何获取相关外键的实例 - Django Rest Framework: How to get instance of related foreign key 如何使用Django REST框架与外键的默认值模型? - How to use Django REST framework with a model with default value for foreign key? Django 外键:获取相关模型? - Django Foreign Key: get related model? 如何获取 django 中与外键相关的所有项目? - How to get all items related to a Foreign Key in django? 如何在Django中获取子模型中存在外键的父模型的所有对象? - How to get all objects of a Parent model of which foreign key exist in child model in Django? 在Django Rest Framework中获取相关模型的值? - Get the values of a related model in Django Rest Framework? 如何在Django Rest框架中使用外键计数 - How to get count with foreign key in django rest framework 如何在 Django Rest Framework 中显示外键的字段值而不是 id 确保所有字段都像以前一样在 DRF HTML 表单上显示 - How to display field value instead of id for foreign key in Django Rest Framework ensuring all fields being displayed as before on DRF HTML form 如何在具有用户 model 外键的 model 中定义 __str__() 方法并获取 Django 中的字段值? - How do I define __str__() method in a model which has a Foreign Key of User model and get the values of fields in Django? 在带有 Django Rest Framework 的 Django 模型中使用 uuid 作为外键 - Use uuid as foreign Key in a model in Django with Django Rest Framework
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM