首页 > 解决方案 > 是否有任何选项可以按 django python 中的模型文件过滤数据?

问题描述

我是Django新手,有没有选择显示数据的选项?我可以按类别过滤,但我必须按选项或模型的字段进行过滤。或者是否有任何选项可以在一个模板中使用多个过滤器?或者我们可以在一个模型中使用两个外键进行过滤吗?这是我的产品模型,我在其中使用了过滤器的归档(成员),但我不能这样做,然后我使用了另一个模型作为过滤器。

class Product(models.Model):
    MEMBER = (
        ('For Kids', 'For Kids'),
        ('For Lover', 'For Lover',),
        ('For Teacher', 'For Teacher'),
        ('For Boss', 'For Boss'),
        )
    category                = models.ForeignKey(Category, related_name='products', on_delete=models.PROTECT)
    member                  = models.CharField(max_length=200,choices = MEMBER)                 
    title                   = models.CharField(max_length=200, db_index=True)
    slug                    = models.SlugField(max_length=200, db_index=True)
    image                   = models.ImageField(upload_to='products/%d/%m/%Y', blank =True)
    description             = models.TextField(blank=True)
    price                   = models.IntegerField(default=0)
    stock                   = models.PositiveIntegerField()
    available               = models.BooleanField(True)
    created                 = models.DateTimeField(auto_now_add=True)
    updated                 = models.DateTimeField(auto_now=True)

    class Meta:
        ordering              = ('-title',)
        index_together        =  (('id','slug'),)

    def __str__(self):
        return self.title

和我的类别模型:

class Category(models.Model):
    title       = models.CharField(max_length=200, db_index=True)
    slug        = models.SlugField(max_length=200, db_index=True, unique=True)
    image       = models.ImageField(upload_to='products/%d/%m/%Y', blank =True)
    parent      = models.ForeignKey('self',blank=True, null=True ,related_name='children', on_delete=models.PROTECT)

     
    class Meta:
        unique_together                 = ('slug', 'parent',)
        ordering                        = ('title',)
        verbose_name                    = 'category'
        verbose_name_plural              = 'categories'

视图.py

def eventmore(request,id,slug):
    products = None
    categories = Category.get_all_categories()
    categoryID = request.GET.get('category')
    if categoryID:
        products = Product.get_all_products_by_categoryid(categoryID)
    else:
        products = Product.get_all_products()

    data = {}
    data['products'] = products
    data['categories'] = categories
    
    
    return render(request, 'events-more.html', data)

我该怎么做才能按选择(成员)过滤或如何制作嵌套类别或按嵌套过滤数据?

标签: pythondjango

解决方案


在这里您可以找到您需要的所有信息https://docs.djangoproject.com/en/3.1/topics/db/queries/是的,您可以过滤多次和/或使用多个参数。例如:

data_entries = Data.objects.filter(name='max', age=10).filter(email='max@gmail.com')

或者

data_entries = Data.objcets.filter(name='max')
data_entires = data_entries.filter(age=10, email='max@gmail.com')

将产生相同的结果。

在您的情况下,只需使用常规文本值对其进行过滤:

category = Category.objcets.get(pk=pk)
product = Product.objects.filter(member='For Kids', category=category)

推荐阅读