我有一个名为“ Product”的应用,具有以下型号。
class Product(models.Model):
product_id = models.CharField(max_length=50)
pub_date = models.DateTimeField(default=datetime.now)
title = models.CharField(max_length=255)
price = models.DecimalField(max_digits=8, decimal_places=2)
user = models.ForeignKey(User, on_delete=models.CASCADE)
featured = models.BooleanField(default=False)
我想在Django Admin中有两个单独的部分:产品和精选产品,具体取决于featured = True
还是False
。
因此,默认情况下,所有产品都列在产品部分下。但是,如果featured = True
,它们将被移至精选产品部分。你能帮我怎么做吗?预先感谢。
答案 0 :(得分:2)
三个步骤:
Product
写一个proxy model。您可以在此处了解更多信息:Using Proxy Models to Customize the Django Admin
答案 1 :(得分:0)
有两种方法可以做到这一点。最简单的方法可能是创建数据库视图,然后使用Django模型封装它。您可以在数据库控制台中创建类似的视图:
CREATE VIEW view_name AS
SELECT columns
FROM tables
[WHERE conditions];
完成此操作后,您可以像这样在django中引用视图:
class FeaturedProduct(modes.Model):
attr1 = models.CharField()
class Meta:
managed = False
db_table = '<name of your view here>'
确保将managed
设置为False
。这是与此相关的documentation。之所以要这样做,是因为django不是为您创建此模型,而是由您自己创建。
执行此操作的另一种方法是创建自定义Manager
。这些管理器允许您修改模型的objects
属性,从而可以设置所需的查询集。我认为您想看看Manager documentation,就可以看看defining custom querysets for your objects。