从Django自动创建数据库视图

时间:2018-05-17 06:03:13

标签: django

也许这个问题也类似于“在使用managed = False在models.py中创建精确的一个特殊模型之前自动执行原始SQL代码”。

例如,我在models.py中有3个模型(默认用户,UserTypes和它们之间的关系):

from django.contrib.auth.models import User

class UserTypes(models.Model):
    type = models.TextField(unique=True)

    class Meta:
        db_table = 'user_types'


class UsersHaveTypes(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    type = models.ForeignKey(UserTypes, on_delete=models.CASCADE)

    class Meta:
        db_table = 'users_have_types'
        unique_together = (("user", "type"), )

我的用户类型很少,其中一个是客户端。现在我想创建端点“/ clients”,它将作为通常的模型(CRUD)。

现在,我只是在models.py中添加它:

class Clients(models.Model):
    first_name = models.TextField(blank=True, null=True)
    last_name = models.TextField(blank=True, null=True)
    # all another fields from User model, which duplicated in the database view

    class Meta:
        managed = False
        db_table = 'clients'

然后我在我的数据库后端手工制作:

  1. 创建数据库视图
  2. 创建一个函数以进行插入,更新 并删除
  3. 创建触发器以触发此功能。
  4. 这是一堆代码,并没有什么特别的,一切正常。

    这一切都是为了在“/ clients”端点上进行工作CRUD,因此,例如,在“创建”中,它将创建用户并自动向users_have_types表添加正确的行,该表将此用户标记为“客户端”。

    有没有更优雅和自动的方式来做到这一点?我移动我的Django项目,我需要再次在数据库后端创建视图,函数和触发器,这需要花费很多时间(对于每个“类型的用户”都是手动)并且是一个丑陋的决定。

    我很惊讶,之前没有人问过这个问题,因为它是一个很好的代码数据库样式来制作一些视图,并隐藏它们背后的真实表格。我知道Django不能自己创建数据库视图,但必须有一种方法来描述自定义SQL代码,用于在数据库中创建表。也许与经理有关,我不知道(我是Django的新手)。当然,它只针对一个数据库后端,但没关系。

0 个答案:

没有答案