Python 检索仅包含相关对象子集的Django模型
我试图检索一个特定的Django模型,其中只有一部分相关对象符合特定条件。例如,我想获得一家特定的Python 检索仅包含相关对象子集的Django模型,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我试图检索一个特定的Django模型,其中只有一部分相关对象符合特定条件。例如,我想获得一家特定的餐厅,并返回该餐厅供应的所有素食比萨饼 例如,如果我有一家名为“爸爸的比萨饼”的餐厅,提供一些比萨饼 假设我有一个比萨饼模型,如下所示: class Pizza(models.Model): ... type = models.CharField(...) restaurant = models.ForeignKey('Restaurant', related_name='pizz
餐厅
,并返回该餐厅供应的所有素食比萨饼
例如,如果我有一家名为“爸爸的比萨饼”的餐厅
,提供一些比萨饼
假设我有一个比萨饼
模型,如下所示:
class Pizza(models.Model):
...
type = models.CharField(...)
restaurant = models.ForeignKey('Restaurant', related_name='pizzas_offered')
...
而Papa's Pizza
提供以下Pizza
s:
(margarita
)type='素食者'
(Pepperoni
)type='carnivore'
(仅菠萝
)type='素食者
pizzas\u offered
字段中检索Papa's Pizza
模型,其中只有margerita
和spiral only
比萨
我将如何着手实现这一点
如果它有帮助的话,我也在使用它,因此如果您对此有任何经验,并且功能可能存在于模型中,而不是模型中,那么这也会起作用
多谢各位 默认情况下,Django不会检索任何相关对象。您必须通过
my\u restaurant.pizzas\u provided.all()
从实例中明确执行此操作。现在,这是一个查询集,因此您可以随意轻松地对其进行筛选:my_restaurant.pizzas\u提供。filter(type='素食者')
默认情况下,Django不会检索任何相关对象。您必须通过my\u restaurant.pizzas\u provided.all()
从实例中明确执行此操作。现在,这是一个查询集,因此您可以根据自己的喜好轻松筛选:my_restaurant.pizzas\u提供。filter(type='素食者')
您可以从爸爸的比萨餐厅获得菠萝/玛格丽塔比萨,如下所示:
restaurant = Restaurant.objects.get(name="Papa's Pizza")
veg_pizzas = restaurant.pizzas_offered.filter(type='vegetarian')
上述措施的作用如下:
class Restaurant(models.Model):
name = models.CharField(max_length=255, null=True, blank=True)
def get_pizzas(self, type):
return self.pizzas_offered.filter(type=type)
# Get vegetarian pizzas from Papa's Pizza restaurant
$> restaurant = Restaurant.objects.get(name="Papa's Pizza")
$> pizzas = restaurant.get_pizzas(type='vegetarian')
更新2
请求:餐厅连载员,将“提供的比萨”连载为“比萨”
class RestaurantSerializer(serializers.ModelSerializer):
pizzas = serializers.SerializerMethodField()
class Meta:
model = Restaurant
fields = ('name', 'pizzas')
def get_pizzas(self, restaurant):
return PizzaSerializer(restaurant.pizzas_offered.all(), many=True).data
文档:。您可以从爸爸的比萨餐厅获得菠萝比萨/玛格丽塔比萨,如下所示:
restaurant = Restaurant.objects.get(name="Papa's Pizza")
veg_pizzas = restaurant.pizzas_offered.filter(type='vegetarian')
上述措施的作用如下:
class Restaurant(models.Model):
name = models.CharField(max_length=255, null=True, blank=True)
def get_pizzas(self, type):
return self.pizzas_offered.filter(type=type)
# Get vegetarian pizzas from Papa's Pizza restaurant
$> restaurant = Restaurant.objects.get(name="Papa's Pizza")
$> pizzas = restaurant.get_pizzas(type='vegetarian')
更新2
请求:餐厅连载员,将“提供的比萨”连载为“比萨”
class RestaurantSerializer(serializers.ModelSerializer):
pizzas = serializers.SerializerMethodField()
class Meta:
model = Restaurant
fields = ('name', 'pizzas')
def get_pizzas(self, restaurant):
return PizzaSerializer(restaurant.pizzas_offered.all(), many=True).data
文档:。您可以通过Django的预取实用程序来实现这一点
from django.db.models import Prefetch
pizzas = Pizza.objects.filter(type='vegetarian')
restaurant = Restaurant.objects \
.prefetch_related(Prefetch('pizzas_offered', pizzas)) \
.get(name="Papa's Pizza")
您可以在上找到更多信息。您可以通过Django的预取实用程序来实现这一点
from django.db.models import Prefetch
pizzas = Pizza.objects.filter(type='vegetarian')
restaurant = Restaurant.objects \
.prefetch_related(Prefetch('pizzas_offered', pizzas)) \
.get(name="Papa's Pizza")
您可以在上找到更多信息,调用
.filter(…)
在my_restaurant
实例上进行筛选也是如此?我不确定您在问什么my_restaurant.pizzas_offered
是对该餐厅提供的比萨的查询filter
根据括号中提供的标准进一步缩小范围。如果我在代码中的其他地方使用my_restaurant
,它是否只有Margarita
和菠萝
?例如,如果有人向我的服务器发送只吃素食比萨的请求,而我返回一个序列化的my_restaurant
作为响应,不需要的比萨会出现在该响应中吗?你必须发布你的序列化程序,并在问题中查看,以获得“不需要的比萨会出现在该响应中吗?”调用.filter(…)
会对my_restaurant
实例进行筛选吗?我不确定你在问什么my_restaurant.pizzas_offered
是对该餐厅提供的比萨的查询filter
根据括号中提供的标准进一步缩小范围。如果我在代码中的其他地方使用my_restaurant
,它是否只有Margarita
和菠萝
?例如,如果有人向我的服务器发送只吃素食比萨的请求,而我返回一个序列化的my_restaurant
作为响应,不需要的比萨会出现在该响应中吗?你必须发布你的序列化程序,并在问题中查看,以获得“不需要的比萨会出现在该响应中吗?”我想要一个my_restaurant
的例子,在那里pizzas\u提供的物品只有Margarita
和菠萝
。这能做到吗?@quotas当然是margerita
和spinapole Only
是素食者
比萨饼。这是一个例子,展示了如何在给定餐厅名称的情况下获得指定类型的比萨饼。我想将过滤后的比萨饼作为餐厅中的一个字段返回,我认为这不能满足我的要求。请您确认您所指的餐厅
是否为餐厅
模型或其序列化程序?如果是它的模型,那么您可以在餐厅
模型中创建一个方法来实现这一点。我想要一个我的餐厅
的实例,其中比萨
中提供的唯一对象是玛格丽塔
和菠萝
。这能做到吗?@quotas当然是margerita
和spinapole Only
是素食者
比萨饼。这是一个例子,展示了如何在给定餐厅名称的情况下获得指定类型的比萨饼。我想将过滤后的比萨饼作为餐厅中的一个字段返回,我认为这不能满足我的要求。请您确认您所指的餐厅
是否为餐厅
模型或其序列化程序?如果是它的模型,那么您可以在餐厅
模型中创建一个方法来实现这一点。