也许这个问题也类似于“在使用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'
然后我在我的数据库后端手工制作:
这是一堆代码,并没有什么特别的,一切正常。
这一切都是为了在“/ clients”端点上进行工作CRUD,因此,例如,在“创建”中,它将创建用户并自动向users_have_types表添加正确的行,该表将此用户标记为“客户端”。
有没有更优雅和自动的方式来做到这一点?我移动我的Django项目,我需要再次在数据库后端创建视图,函数和触发器,这需要花费很多时间(对于每个“类型的用户”都是手动)并且是一个丑陋的决定。
我很惊讶,之前没有人问过这个问题,因为它是一个很好的代码数据库样式来制作一些视图,并隐藏它们背后的真实表格。我知道Django不能自己创建数据库视图,但必须有一种方法来描述自定义SQL代码,用于在数据库中创建表。也许与经理有关,我不知道(我是Django的新手)。当然,它只针对一个数据库后端,但没关系。