開門見山。
這是我的模型:
class Product(models.Model):
brand = models.CharField(max_length=40)
model = models.CharField(max_length=40)
price = models.FloatField(default=0)
colors = ArrayField(models.CharField(max_length=20), blank=True, null=True, default=[])
sizes = ArrayField(models.IntegerField(), blank=True, null=True)
discount_price = models.FloatField(null=True, blank=True, default=list)
date_added = models.DateTimeField(auto_now_add=True)
desc = models.TextField(default=None, blank=True, null=True)
gender = models.CharField(choices=GENDER_CHOICES, blank=True, null=True, max_length=10)
for_kids = models.BooleanField(blank=True, null=True)
序列化器:
class ProductsSerializer(serializers.ModelSerializer):
pictures = ProductPicturesSerializer(many=True, read_only=True)
average_rating = serializers.SerializerMethodField()
def get_average_rating(self, obj):
return obj.average_rating
class Meta:
model = Product
fields = ['id', 'brand', 'model', 'price', 'discount_price',
'date_added', 'for_kids', 'gender',
'average_rating', 'sizes', 'colors', 'pictures']
我的自定義過濾器:
class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
pass
class ProductsFilter(filters.FilterSet):
min_price = filters.NumberFilter(field_name="price", lookup_expr='gte')
max_price = filters.NumberFilter(field_name="price", lookup_expr='lte')
colors = CharArrayFilter(lookup_expr='contains')
class Meta:
model = Product
fields = {
'brand': ['in'],
'model': ['in', 'exact'],
}
問題是,當我用紅色、黑色、藍色等顏色過濾它時,它只顯示在陣列中具有這些值的子集的物件,而不是我的目標之一。我找不到任何可以作業的查找運算式,如果有人想知道,嘗試 lookup_expr = colors__in 也不起作用。就像在此欄位中顯示所有具有紅色或黑色或藍色值的鞋子。
請幫忙,我已經嘗試了一切
uj5u.com熱心網友回復:
overlap 是您所追求的查找運算式。
回傳資料與傳遞的值共享任何結果的物件。使用 SQL 運算子 &&。例如:
>>> Post.objects.create(name='First post', tags=['thoughts', 'django']) >>> Post.objects.create(name='Second post', tags=['thoughts']) >>> Post.objects.create(name='Third post', tags=['tutorial', 'django']) >>> Post.objects.filter(tags__overlap=['thoughts']) <QuerySet [<Post: First post>, <Post: Second post>]> >>> Post.objects.filter(tags__overlap=['thoughts', 'tutorial']) <QuerySet [<Post: First post>, <Post: Second post>, <Post: Third post>]>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/409938.html
標籤:
