1
+ from collections import Counter
1
2
from django .db import models
2
3
import sys
3
4
from computedfields .models import ComputedFieldsModel , computed , precomputed , ComputedField
@@ -1107,3 +1108,46 @@ class Meta:
1107
1108
class HaProxy (Ha ):
1108
1109
class Meta :
1109
1110
proxy = True
1111
+
1112
+
1113
+ class Tag (ComputedFieldsModel ):
1114
+ name = models .CharField (max_length = 32 , unique = True )
1115
+
1116
+
1117
+ run_counters = Counter ()
1118
+
1119
+
1120
+ class Advert (ComputedFieldsModel ):
1121
+ name = models .CharField (max_length = 32 )
1122
+
1123
+ tags = models .ManyToManyField (Tag , related_name = "adverts" )
1124
+
1125
+ @computed (
1126
+ field = models .CharField (max_length = 500 ),
1127
+ depends = [("tags" , ["name" ])],
1128
+ )
1129
+ def all_tags (self ) -> str :
1130
+ run_counters .update (["all_tags" ])
1131
+ if not self .pk :
1132
+ return ""
1133
+ return ", " .join (self .tags .values_list ("name" , flat = True ))
1134
+
1135
+ def __str__ (self ) -> str :
1136
+ return f"{ self .name } "
1137
+
1138
+ class Room (ComputedFieldsModel ):
1139
+ name = models .CharField (max_length = 32 )
1140
+ advert = models .ForeignKey (Advert , related_name = "rooms" , on_delete = models .CASCADE )
1141
+
1142
+ @computed (
1143
+ field = models .BooleanField (),
1144
+ depends = [("advert.tags" , ["name" ])],
1145
+ )
1146
+ def is_ready (self ) -> bool :
1147
+ run_counters .update (["is_ready" ])
1148
+ if not self .pk :
1149
+ return False
1150
+ return self .advert .tags .filter (name = "ready" ).exists ()
1151
+
1152
+ def __str__ (self ) -> str :
1153
+ return f"{ self .name } "
0 commit comments