如果我需要数据库视图?

时间:2012-04-17 08:00:04

标签: python django

我有这些模特:

class Company(models.Model):
    name=models.CharField(max_length=100)
    description=models.TextField()
    #some more fields

class Product(models.Model):
    name=models.CharField(max_length=100)
    company=models.ForeignKey(Company)
    #some more fields

class Category(models.Model):
    parent=models.ForeignKey('self',null=True,blank=True)
    name=models.CharField(max_length=100)
    products=models.ManyToManyField(Product,null=True,blank=True)
    #some more fields

因为你可以看到每个公司都有一个产品列表,每个产品属于某些类别,我将使用company pk获取每个公司的类别列表,最佳做法是什么?我应该定义数据库视图?我该怎么做?

注意:我从来没有在django中使用数据库视图,我搜索过它,这听起来不容易!

2 个答案:

答案 0 :(得分:2)

我总是尽量避免使用数据库视图,存储过程和一般“数据库本身”而不是应用程序代码库中的东西,原因很简单,因为它很难维护(而且你也说再见数据库无关的应用程序)。

我的建议是坚持使用django orm(可以做很多事情),并且只有当你无法获得不错的表现或者你需要通过存储过程/视图提供某些高级功能时才能获得该解决方案。< / p>

在django中使用视图非常简单。

假设您有1个要查询的视图,您在数据库上创建视图,然后使用与视图'列(名称和类型)匹配的字段编写模型。

<强>更新: 然后,您需要将表名设置为元类定义中的视图名称。

之后你需要告诉django不要写这个并且不要尝试为视图模型创建一个表,幸运的是有一个conf:

class ViewModel(models.Model):
    ... view columns ...

    class Meta():
        db_table = 'view_name'
        managed = False

答案 1 :(得分:1)

我不知道为什么你认为你需要这里的数据库视图。通常,您不会将它们与Django一起使用,因为您通过ORM在Python中执行所有逻辑。

要获取公司的类别列表,您可以这样做:

categories = Category.objects.filter(products__company=my_company)

其中my_company是您感兴趣的公司实例。