如何在Django Admin中分离对象?

时间:2019-04-22 13:58:09

标签: python django

我有一个名为“ 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,它们将被移至精选产品部分。你能帮我怎么做吗?预先感谢。

2 个答案:

答案 0 :(得分:2)

三个步骤:

  1. 为模型Product写一个proxy model
  2. default manager更改为仅返回特色产品。
  3. 像其他模型一样,在管理员中注册您的代理模型。

您可以在此处了解更多信息: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