@@ -170,12 +170,23 @@ def on_error(self):
170
170
pass
171
171
172
172
173
+ class BlogPostState (models .IntegerChoices ):
174
+ NEW = 0 , "New"
175
+ PUBLISHED = 1 , "Published"
176
+ HIDDEN = 2 , "Hidden"
177
+ REMOVED = 3 , "Removed"
178
+ RESTORED = 4 , "Restored"
179
+ MODERATED = 5 , "Moderated"
180
+ STOLEN = 6 , "Stolen"
181
+ FAILED = 7 , "Failed"
182
+
183
+
173
184
class BlogPost (models .Model ):
174
185
"""
175
186
Test workflow
176
187
"""
177
188
178
- state = FSMField (default = "new" , protected = True )
189
+ state = FSMField (choices = BlogPostState . choices , default = BlogPostState . NEW , protected = True )
179
190
180
191
class Meta :
181
192
permissions = [
@@ -186,41 +197,53 @@ class Meta:
186
197
def can_restore (self , user ):
187
198
return user .is_superuser or user .is_staff
188
199
189
- @transition (field = state , source = "new" , target = "published" , on_error = "failed" , permission = "testapp.can_publish_post" )
200
+ @transition (
201
+ field = state ,
202
+ source = BlogPostState .NEW ,
203
+ target = BlogPostState .PUBLISHED ,
204
+ on_error = BlogPostState .FAILED ,
205
+ permission = "testapp.can_publish_post" ,
206
+ )
190
207
def publish (self ):
191
208
pass
192
209
193
- @transition (field = state , source = "published" )
210
+ @transition (field = state , source = BlogPostState . PUBLISHED )
194
211
def notify_all (self ):
195
212
pass
196
213
197
214
@transition (
198
215
field = state ,
199
- source = "published" ,
200
- target = "hidden" ,
201
- on_error = "failed" ,
216
+ source = BlogPostState . PUBLISHED ,
217
+ target = BlogPostState . HIDDEN ,
218
+ on_error = BlogPostState . FAILED ,
202
219
)
203
220
def hide (self ):
204
221
pass
205
222
206
223
@transition (
207
224
field = state ,
208
- source = "new" ,
209
- target = "removed" ,
210
- on_error = "failed" ,
225
+ source = BlogPostState . NEW ,
226
+ target = BlogPostState . REMOVED ,
227
+ on_error = BlogPostState . FAILED ,
211
228
permission = lambda _ , u : u .has_perm ("testapp.can_remove_post" ),
212
229
)
213
230
def remove (self ):
214
231
raise Exception (f"No rights to delete { self } " )
215
232
216
- @transition (field = state , source = "new" , target = "restored" , on_error = "failed" , permission = can_restore )
233
+ @transition (
234
+ field = state ,
235
+ source = BlogPostState .NEW ,
236
+ target = BlogPostState .RESTORED ,
237
+ on_error = BlogPostState .FAILED ,
238
+ permission = can_restore ,
239
+ )
217
240
def restore (self ):
218
241
pass
219
242
220
- @transition (field = state , source = ["published" , "hidden" ], target = "stolen" )
243
+ @transition (field = state , source = [BlogPostState . PUBLISHED , BlogPostState . HIDDEN ], target = BlogPostState . STOLEN )
221
244
def steal (self ):
222
245
pass
223
246
224
- @transition (field = state , source = "*" , target = "moderated" )
247
+ @transition (field = state , source = "*" , target = BlogPostState . MODERATED )
225
248
def moderate (self ):
226
249
pass
0 commit comments