0
我在全球範圍內使用OrderingFilter
通過settings.py
,它的效果很好。Django Rest Framework排序篩選器,按嵌套列表長度排序
現在我想訂購一個來自ManyToManyField
的嵌套列表的大小。這可能與默認OrderingFilter
?
如果不是,有沒有一種方法可以通過自定義過濾器來實現,同時將查詢參數ordering
保留在url(http://example.com/recipes/?ordering=
)中。爲了一致性。
哦,ManyToManyField是一個通過表一。
這些都是我models.py
:
class Recipe(models.Model):
name = models.CharField(max_length=255)
cook_time = models.FloatField()
ingredients = models.ManyToManyField(IngredientTag, through=Ingredient)
我serializers.py
:
class IngredientTagSerializer(serializers.ModelSerializer):
class Meta:
model = IngredientTag
fields = ('id', 'label')
class IngredientSerializer(serializers.ModelSerializer):
class Meta:
model = Ingredient
fields = ('amount', 'unit', 'ingredient_tag')
depth = 1
class RecipeSerializer(serializers.ModelSerializer):
ingredients = IngredientSerializer(source='ingredient_set', many=True)
class Meta:
model = Recipe
fields = ('id', 'url', 'name', 'ingredients', 'cook_time')
read_only_fields = ('owner',)
depth = 2
而且我views.py
:
class RecipeViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows recipes to be viewed or edited.
"""
queryset = Recipe.objects.all().order_by()
serializer_class = RecipeSerializer
permission_classes = (DRYPermissions,)
ordering_fields = ('cook_time',) #Need ingredient count somewhere?
謝謝!
首先你不能使用的'len個'對obj.redredients。你必須使用obj.ingredients.all()或其他東西,對吧?其次它不起作用。我得到一個'FieldError:無法解析關鍵字u'ingredients_length'到field.'我想我在某處讀取OrderingFilter在數據庫級別的工作,所以python計算字段不工作? –
我編輯我的答案,希望這個幫助。 – Windsooon
感謝您的幫助。在這兩種情況下,我都可以將字段顯示在我的API結果中,但在嘗試排序時仍然會出現FieldError。我唯一的選擇是使用自定義過濾器嗎? –