@@ -421,6 +421,7 @@ def __init__(
421
421
limit : Optional [int ] = None ,
422
422
page_size : int = DEFAULT_PAGE_SIZE ,
423
423
sort_fields : Optional [List [str ]] = None ,
424
+ return_fields : Optional [List [str ]] = None ,
424
425
nocontent : bool = False ,
425
426
):
426
427
if not has_redisearch (model .db ()):
@@ -445,6 +446,11 @@ def __init__(
445
446
else :
446
447
self .sort_fields = []
447
448
449
+ if return_fields :
450
+ self .return_fields = self .validate_return_fields (return_fields )
451
+ else :
452
+ self .return_fields = []
453
+
448
454
self ._expression = None
449
455
self ._query : Optional [str ] = None
450
456
self ._pagination : List [str ] = []
@@ -502,8 +508,19 @@ def query(self):
502
508
if self ._query .startswith ("(" ) or self ._query == "*"
503
509
else f"({ self ._query } )"
504
510
) + f"=>[{ self .knn } ]"
511
+ if self .return_fields :
512
+ self ._query += f" RETURN { ',' .join (self .return_fields )} "
505
513
return self ._query
506
514
515
+ def validate_return_fields (self , return_fields : List [str ]):
516
+ for field in return_fields :
517
+ if field not in self .model .__fields__ : # type: ignore
518
+ raise QueryNotSupportedError (
519
+ f"You tried to return the field { field } , but that field "
520
+ f"does not exist on the model { self .model } "
521
+ )
522
+ return return_fields
523
+
507
524
@property
508
525
def query_params (self ):
509
526
params : List [Union [str , bytes ]] = []
@@ -956,6 +973,11 @@ def sort_by(self, *fields: str):
956
973
if not fields :
957
974
return self
958
975
return self .copy (sort_fields = list (fields ))
976
+
977
+ def return_fields (self , * fields : str ):
978
+ if not fields :
979
+ return self
980
+ return self .copy (return_fields = list (fields ))
959
981
960
982
async def update (self , use_transaction = True , ** field_values ):
961
983
"""
@@ -1531,7 +1553,9 @@ def find(
1531
1553
* expressions : Union [Any , Expression ],
1532
1554
knn : Optional [KNNExpression ] = None ,
1533
1555
) -> FindQuery :
1534
- return FindQuery (expressions = expressions , knn = knn , model = cls )
1556
+ return FindQuery (
1557
+ expressions = expressions , knn = knn , model = cls
1558
+ )
1535
1559
1536
1560
@classmethod
1537
1561
def from_redis (cls , res : Any ):
0 commit comments