如何在URL中发送信息?

时间:2018-06-04 13:25:34

标签: django django-forms url-encoding

我正在尝试创建一个产品过滤器。 我在URL中发送用户选择 如果用户选择size = L,则使用request.GET

我收到: {'size': ['L']}

但我希望收到:{'size':{'op':'in','attri':'L'}}

这可能吗? 请帮忙

我的模特

class ProductAttribute(models.Model):
    slug = models.SlugField(max_length=50, unique=True)
    name = models.CharField(max_length=100)
    op = models.CharField(max_length=20,default='in')

    class Meta:
        ordering = ('slug', )

    def __str__(self):
        return self.name

    def get_formfield_name(self):
        return slugify('attribute-%s' % self.slug, allow_unicode=True)

    def has_values(self):
        return self.values.exists()


class AttributeChoiceValue(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)
    attribute = models.ForeignKey(
        ProductAttribute, related_name='values', on_delete=models.CASCADE)

    class Meta:
        unique_together = ('name', 'attribute')

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField(max_length=128)
    attributes = HStoreField(default={})



q2 = AttributeChoiceValue.objects.filter(attribute__name='size')

我的尺寸过滤器(filter.py)是:

size = django_filters.ModelMultipleChoiceFilter(queryset=q2.values_list('name', flat=True).distinct(),widget=forms.CheckboxSelectMultiple)

我目前正在使用以下查询来过滤views.py中的数据库

result = Product.objects.all()

for key, value in request.GET:result = result.filter(**{'attributes__{}__in'.format(key): value})

我想成功

a=request.GET
for key, value in a:
result = result.filter(**{'attributes__{}__{}'.format(key,a['op']): value})

因此,如果我甚至使用Price范围作为过滤器,我的查询过滤器将相应地

attributes__price__range

1 个答案:

答案 0 :(得分:0)

您可以通过“路径转换器”将信息发送到您的观看次数: https://docs.djangoproject.com/en/2.0/topics/http/urls/#path-converters

或使用正则表达式: https://docs.djangoproject.com/en/2.0/topics/http/urls/#using-regular-expressions