简体   繁体   中英

How To Separate Objects In Django Admin?

I have an app called 'Product' with the following models.py:

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)

I want to have two separate sections in Django Admin: Products and Featured Products , depending if featured = True or False . So by default all products are listed under the Products section. But if featured = True they will be moved to Featured Products section. Can you please help me how to do that? Thanks in advance.

Three steps:

  1. Write a proxy model for model Product .
  2. Change the default manager to only returns featured products.
  3. Register your proxy model in the admin like any other model.

You can read more about it here: Using Proxy Models to Customize the Django Admin

There are a couple of ways to do this. The simplest perhaps is to create a database view, and then encapsulate it using a django model. You can create a view like so in your database console:

CREATE VIEW view_name AS
  SELECT columns
  FROM tables
  [WHERE conditions];

Once you have done that, you can reference the view in django like so:


class FeaturedProduct(modes.Model):
    attr1 = models.CharField()

    class Meta:
        managed = False
        db_table = '<name of your view here>'

Make sure that managed is set to False . Here is the relevant documentation for that. You want to do that because django is not creating this model for you, but rather you are creating it yourself.

Another way to do this would be to create a custom Manager . These managers allow you to modify the objects attribute of your model, allowing you to set a queryset that you want. I think you'd want to take a look at the Manager documentation and you can take a look at defining custom querysets for your objects .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM