摘要:本文主要讲述了通过Django的models管理数据库视图的方法和注意事项。

视图的创建

Django本身并不提供创建视图的接口,因此需要实现在DBMS中创建好视图,随后在Django中进程管理。
本篇博文将不会涉及到视图创建的相关操作。

视图的管理

Django可以通过创建一个和视图的字段对应一致的模型来管理视图。值得注意的是,即使视图的数据来源表中含有外键,在Django中创建模型的时候,不应该将对应的字段设置为外键。否则可能会导致一些问题。
设想,有一个Nation模型

class Nation(models.Model):
    NationName = models.CharField('NationName', primary_key=True, max_length=50)
    Area = models.CharField('Area', max_length=50)
    Comment = models.TextField('ServiceName', max_length=50)

    class Meta:
        db_table = 'Nation'

和一个City模型

class City(models.Model):
    CityID = models.AutoField('CityID', primary_key=True, max_length=10)
    CityName = models.CharField('CityName', blank=False, max_length=50)
    NationName = models.ForeignKey('Nation', on_delete=models.CASCADE)
    Comment = models.TextField('ServiceName', max_length=50)

    class Meta:
        db_table = 'City'

现有一个视图,抽取了这两个表中的所字段,如果需要管理这个视图,则可以建立如下的模型:

class CityInfo(models.Model):
    CityID = models.AutoField('CityID', primary_key=True, max_length=10)
    CityName = models.CharField('CityName', blank=False, max_length=50)
    PowerTariff = models.FloatField('PowerTariff')
    NationName = models.ForeignKey('Nation', on_delete=models.CASCADE)
    Comment = models.TextField('ServiceName', max_length=50)
    NationName = models.CharField('NationName', max_length=50)
    Area = models.CharField('Area', max_length=50)

    class Meta:
        managed = False
        db_table = 'CityInfo'

可以看到,即使City.NationName是一个外键,在创建视图的时候依然可以将CityInfo.NationName设置为一个普通键。

视图的操作

视图的查询操作和基本表的查询操作一致。
视图不支持修改,删除,插入操作。