Django模型 - 根据模型字段

时间:2018-02-06 14:59:28

标签: python django django-models

我有一个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'中拉出来

0 个答案:

没有答案