Django rest framework Django:序列化程序+查询优化
我有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
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查询的一个有用的包是