Django rest framework Django:序列化程序+查询优化

Django rest framework Django:序列化程序+查询优化,django-rest-framework,Django Rest Framework,我有Django模型,如下所示 class Chef(models.Model): name = models.CharField(max_length=128, unique=True) class Restaurant(models.Model): chef = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE) location = models.CharFiel

我有Django模型,如下所示

class Chef(models.Model):
    name = models.CharField(max_length=128, unique=True)

class Restaurant(models.Model):
    chef = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
    location = models.CharField(max_length=128)
    ranking = models.IntegerField(default=99999)

和序列化器类别

class ChefSerializer(serializers.ModelSerializer):
    restaurant = RestaurantSerializer(read_only=True)
    class Meta:
        model = Chef
        fields = ('name', 'restaurant')

class RestaurantSerializer(serializers.ModelSerializer):
    class Meta:
        model = Restaurant
        fields = ('chef', 'location', 'ranking')
我用的是这样的

class MyView(generics.ListCreateAPIView):
    queryset = Chef.objects.all()
    serializer_class = ChefSerializer
    ...
    def do_somthing(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset)
        calculate_something(serializer.data)
...
我想优化我的查询,所以尝试如下检查它们

...
print(queryset.query) # "SELECT chef.id, chef.name FROM chef"
...
但我找不到我的餐厅试用者使用的确切查询

我想做一些像printrestaurantserializer.data.query这样的事情。我该怎么办?我想知道何时以及如何执行与餐厅表相关的查询

我还想将我的查询优化为一个查询,比如选择c.name、r.location、r.ranking FROM chef c JOIN restaurant r ON c.id=r.chef_id


您可以调整查询集:

res=餐厅。对象。仅“位置”,“排名”。过滤器chef\u id=1 如果要获取厨师的姓名,必须执行以下操作:

res=餐厅。对象。选择与餐厅相关的“厨师”。仅选择“位置”、“排名”、“厨师姓名”。filterchef\u id=1 您可以在中阅读有关“选择\u相关”和“预回迁\u相关”的更多详细信息

查看SQL查询的一个有用的包是