gpt4 book ai didi

django - FilterSet(django-filter)添加一些参数+一些参数

转载 作者:行者123 更新时间:2023-12-04 16:10:41 24 4
gpt4 key购买 nike

我有 3 个模型:

class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=70, null=True, blank=True)

class SubCategory(models.Model):
category= models.ForeignKey(Category, on_delete=models.CASCADE)
name = models.CharField(max_length=200, )

class Products(models.Model):
user= models.ForeignKey(User, on_delete=models.CASCADE)
category= models.ForeignKey(Category, on_delete=models.CASCADE)
subcategory = models.CharField(max_length=200, null=True, blank=True)

我有一个 View 接收 requestcategory.slug

def category_list(request, slug):
category = Category.objects.get(slug=slug)
products = ProductFilter(request.GET, queryset=Products.objects.filter(category=category)

return render(request, 'products/category_list.html', {"products":products, 'category': category})

渲染时我收到一个过滤到 CategoryQuerySet

我想将 category.id 发送到 ProductsFilter 并从数据库中接收动态 Choices

class ProductsFilter(django_filters.FilterSet):
subcategory= django_filters.ChoiceFilter(lookup_expr='iexact', choices=TEST, required=False)

class Meta:
model = Products
fields = {
"subcategory",
}

想要将 choices=TEST 更改为 choices=list(SubCategory.objects.filter(category_id=category.id)

这可能吗?

最佳答案

@Sherpa 的回答只有两个小问题。首先,您应该将 fields 替换为 filters。其次,你不能使用+=操作符,你必须直接赋值给过滤器的extra。这是我的两种不同方式的工作代码

class LayoutFilterView(filters.FilterSet):
supplier = filters.ChoiceFilter(
label=_('Supplier'), empty_label=_("All Suppliers"),)

def __init__(self, *args, **kwargs):
super(LayoutFilterView, self).__init__(*args, **kwargs)

# First Method
self.filters['supplier'].extra['choices'] = [
(supplier.id, supplier.name) for supplier in ourSuppliers(request=self.request)
]

# Second Method
self.filters['supplier'].extra.update({
'choices': [(supplier.id, supplier.name) for supplier in ourSuppliers(request=self.request)]
})

最初发布 here

关于django - FilterSet(django-filter)添加一些参数+一些参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com