我有这些模特:
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中使用数据库视图,我搜索过它,这听起来不容易!
答案 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
是您感兴趣的公司实例。