我有一个Django模型,例如,我将其称为Book:
class Book(Model):
class Meta:
db_table = 'book'
我需要根据图书实例属性
动态更改'db_table'例如: 当id> 100时,选择'book_new'表
所以对于查询:
Book.objects.get(id=200)
'book_new'将被使用。
在创建新书时(对于“新”属性):
Book(name='ff', new=True).save()
新记录被添加到'book_new'(而不是'book')
更新
在一个模型上拥有它的原因与User对象有关。 我们有继承Django AbstractUser的CustomUser。
我需要向系统添加另一个用户(我们称之为User2),它具有所有用户功能+相关的表格(如m2m表,如auth_user_groups等),因此我需要添加的唯一新表是' auth_user2',m2m数据将保存在相同的用户表'auth_user'中。
如果我们要添加新类,我们将会有许多与m2m字段相关的更改(命名表,命名字段等)。
我们也不想改变所有指向用户类的模型。 (如果我们将Book类与外键用于用户,那么book.user将返回所请求的用户(user或user2 - 根据用户ID))。 希望它清楚。
class User(AbstractUser):
__metaclass__ = classmaker()
objects = UserManager()
class Meta:
db_table = 'auth_user'
class Book(Model):
name = CharField()
user = ForeignKey(User)
所以当id小于100时,book.user将从auth_user tbl获取用户,否则它将从'auth_user2'获得用户
用户和用户2的所有m2m字段都来自同一个表。 所以user.groups和user2.groups将从同一个表'auth_user_groups'中拉出来