@@ -46,7 +46,7 @@ class Order(BaseHashModel):
46
46
created_on : datetime .datetime
47
47
48
48
class Member (BaseHashModel ):
49
- id : int = Field (index = True )
49
+ id : int = Field (index = True , primary_key = True )
50
50
first_name : str = Field (index = True )
51
51
last_name : str = Field (index = True )
52
52
email : str = Field (index = True )
@@ -445,7 +445,7 @@ async def test_saves_model_and_creates_pk(m):
445
445
# Save a model instance to Redis
446
446
await member .save ()
447
447
448
- member2 = await m .Member .get (member .pk )
448
+ member2 = await m .Member .get (pk = member .id )
449
449
assert member2 == member
450
450
451
451
@@ -495,7 +495,7 @@ async def test_delete(m):
495
495
)
496
496
497
497
await member .save ()
498
- response = await m .Member .delete (member .pk )
498
+ response = await m .Member .delete (pk = member .id )
499
499
assert response == 1
500
500
501
501
@@ -588,8 +588,8 @@ async def test_saves_many(m):
588
588
result = await m .Member .add (members )
589
589
assert result == [member1 , member2 ]
590
590
591
- assert await m .Member .get (pk = member1 .pk ) == member1
592
- assert await m .Member .get (pk = member2 .pk ) == member2
591
+ assert await m .Member .get (pk = member1 .id ) == member1
592
+ assert await m .Member .get (pk = member2 .id ) == member2
593
593
594
594
595
595
@py_test_mark_asyncio
@@ -618,14 +618,14 @@ async def test_delete_many(m):
618
618
result = await m .Member .delete_many (members )
619
619
assert result == 2
620
620
with pytest .raises (NotFoundError ):
621
- await m .Member .get (pk = member1 .pk )
621
+ await m .Member .get (pk = member1 .key () )
622
622
623
623
624
624
@py_test_mark_asyncio
625
625
async def test_updates_a_model (members , m ):
626
626
member1 , member2 , member3 = members
627
627
await member1 .update (last_name = "Smith" )
628
- member = await m .Member .get (member1 .pk )
628
+ member = await m .Member .get (member1 .id )
629
629
assert member .last_name == "Smith"
630
630
631
631
@@ -681,3 +681,59 @@ class Address(m.BaseHashModel):
681
681
Address .redisearch_schema ()
682
682
== f"ON HASH PREFIX 1 { key_prefix } SCHEMA pk TAG SEPARATOR | a_string TAG SEPARATOR | a_full_text_string TAG SEPARATOR | a_full_text_string AS a_full_text_string_fts TEXT an_integer NUMERIC SORTABLE a_float NUMERIC"
683
683
)
684
+
685
+
686
+ @py_test_mark_asyncio
687
+ async def test_primary_key_model_error (m ):
688
+
689
+ class Customer (m .BaseHashModel ):
690
+ id : int = Field (primary_key = True , index = True )
691
+ first_name : str = Field (primary_key = True , index = True )
692
+ last_name : str
693
+ bio : Optional [str ]
694
+
695
+ await Migrator ().run ()
696
+
697
+ with pytest .raises (RedisModelError , match = "You must define only one primary key for a model" ):
698
+ _ = Customer (
699
+ id = 0 ,
700
+ first_name = "Mahmoud" ,
701
+ last_name = "Harmouch" ,
702
+ bio = "Python developer, wanna work at Redis, Inc."
703
+ )
704
+
705
+
706
+ @py_test_mark_asyncio
707
+ async def test_primary_pk_exists (m ):
708
+
709
+ class Customer1 (m .BaseHashModel ):
710
+ id : int
711
+ first_name : str
712
+ last_name : str
713
+ bio : Optional [str ]
714
+
715
+ class Customer2 (m .BaseHashModel ):
716
+ id : int = Field (primary_key = True , index = True )
717
+ first_name : str
718
+ last_name : str
719
+ bio : Optional [str ]
720
+
721
+ await Migrator ().run ()
722
+
723
+ customer = Customer1 (
724
+ id = 0 ,
725
+ first_name = "Mahmoud" ,
726
+ last_name = "Harmouch" ,
727
+ bio = "Python developer, wanna work at Redis, Inc."
728
+ )
729
+
730
+ assert 'pk' in customer .__fields__
731
+
732
+ customer = Customer2 (
733
+ id = 1 ,
734
+ first_name = "Kim" ,
735
+ last_name = "Brookins" ,
736
+ bio = "This is member 2 who can be quite anxious until you get to know them." ,
737
+ )
738
+
739
+ assert 'pk' not in customer .__fields__
0 commit comments