1

我有这些模型:

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 中使用过数据库视图,我搜索过它,这对我来说听起来并不容易!

4

2 回答 2

2

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

我的建议是坚持使用 django orm(它可以做很多事情),并且只有在您无法获得体面的性能或者您需要通过存储过程/视图提供的一些高级功能时才使用该解决方案。

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

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

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

之后,您需要告诉 django 不要在上面写,也不要尝试为视图模型创建表,幸运的是有一个 conf:

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

    class Meta():
        db_table = 'view_name'
        managed = False
于 2012-04-17T08:20:06.967 回答
1

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

要获取公司的类别列表,您可以执行以下操作:

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

my_company您感兴趣的 Company 实例在哪里。

于 2012-04-17T08:36:55.530 回答