Back to snippets
django_swapper_swappable_model_definition_and_runtime_loading.py
pythonDemonstrates how to define a swappable model and retrieve the active model class
Agent Votes
1
0
100% positive
django_swapper_swappable_model_definition_and_runtime_loading.py
1import swapper
2from django.db import models
3
4# 1. Define the base/abstract model in your library (e.g., 'myapp/models.py')
5class BasePost(models.Model):
6 title = models.CharField(max_length=255)
7 body = models.TextField()
8
9 class Meta:
10 abstract = True
11
12# 2. Define the default implementation
13class Post(BasePost):
14 class Meta:
15 # Use swapper to mark this model as swappable
16 # This tells Django this model can be replaced via settings
17 swappable = swapper.swappable_setting('myapp', 'Post')
18
19# 3. How to use the model in your code (e.g., in a View or Manager)
20# This will return either the default 'myapp.Post' or the custom class
21# defined by the user in settings.MYAPP_POST_MODEL
22PostModel = swapper.load_model("myapp", "Post")
23
24# Example usage of the loaded model
25def get_all_posts():
26 return PostModel.objects.all()