Django rest framework группа по
Я хочу сгруппировать данные на основе ingredient_id, чтобы они не повторялись в ответе, как вы видите, я делаю запрос на основе ingredient_id, который является внешним ключом, поэтому он может повторяться в базе данных. Но я хочу, чтобы все данные об ингредиентах были только один раз, а затем информация о цепочке поставок вокруг них.
model.py
class SupplyChainStops(models.Model):
ingredient = models.ForeignKey(Ingredients, null=True, on_delete=models.CASCADE)
stop_name = models.CharField(max_length=1024, null=True, blank=True)
stop_longitude = models.CharField(max_length=500, null=True, blank=True)
stop_latitude = models.CharField(max_length=500, null=True, blank=True)
def __str__(self):
return f'{self.stop_name}'
query
@api_view(['GET'])
def supply_chain_response_detail(request, id):
ingredient_detail = SupplyChainStops.objects.filter(ingredient_id=id).all()
serializer = SupplyChainStopsSerializer(ingredient_detail, many=True)
return Response(serializer.data)
Serializer
class IngredientSerializer(serializers.ModelSerializer):
ingredient_category = IngredientCategorySerializer()
supplier = SuppliersSerializer()
origin = OriginSerializer()
allergies = AllergiesSerializer(many=True)
class Meta:
model = Ingredients
fields = '__all__'
class SupplyChainStopsSerializer(serializers.ModelSerializer):
ingredient = IngredientSerializer(many=False)
class Meta:
model = SupplyChainStops
fields = '__all__'
Вы можете сделать отчетливый запрос с позиционным аргументом. Вот новая версия вашего представления.
@api_view(['GET'])
def supply_chain_response_detail(request, id):
ingredient_detail = SupplyChainStops.objects.filter(ingredient_id=id).distinct(
"ingredient_id")
serializer = SupplyChainStopsSerializer(ingredient_detail, many=True)
return Response(serializer.data)
NOTE: Позиционный аргумент поддерживается только в PostgreSQL