Hello, I would like to use one of the fields(symbol) in this model as a primary key, it’s guaranteed to be unique:
from redis_om import HashModel, JsonModel, Field, Migrator
import datetime
class Stock(JsonModel):
symbol: str = Field(index=True, sortable=False, full_text_search=False, primary_key=True)
stock_type: str = Field(index=True, sortable=False, full_text_search=False, default="cs", primary_key=False)
call_date: datetime.date = None
test: List[float] = []
age: int = None
bio: str = None
class Meta:
global_key_prefix = "us"
primary_key_creator_cls = None
Using this I get an error:
> wfc_z = Stock(symbol='WFCpZ', stock_type='ps', age=13)
---------------------------------------------------------------------------
RedisModelError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_2308/3828729549.py in <module>
----> 1 wfc_z = Stock(symbol='WFCpZ', stock_type='ps', age=13)
e:\projects\numba_test_py\.venv\lib\site-packages\redis_om\model\model.py in __init__(self, *args, **kwargs)
1461 "loaded. JsonModel depends on RedisJson."
1462 )
-> 1463 super().__init__(*args, **kwargs)
1464
1465 def save(self, pipeline: Optional[Pipeline] = None) -> "JsonModel":
e:\projects\numba_test_py\.venv\lib\site-packages\redis_om\model\model.py in __init__(__pydantic_self__, **data)
1104 def __init__(__pydantic_self__, **data: Any) -> None:
1105 super().__init__(**data)
-> 1106 __pydantic_self__.validate_primary_key()
1107
1108 def __lt__(self, other):
e:\projects\numba_test_py\.venv\lib\site-packages\redis_om\model\model.py in validate_primary_key(cls)
1145 raise RedisModelError("You must define a primary key for the model")
1146 elif primary_keys > 1:
-> 1147 raise RedisModelError("You must define only one primary key for a model")
1148
1149 @classmethod
RedisModelError: You must define only one primary key for a model
I don’t understand what I am doing wrong or how to implement the primary_key_creator_cls if necessary.
The end goal is to make the key look something like us:__main__:Stock:WFCpZ
instead of a ULID string.