这就是我的模特:
class Org:
name = CharField()
owner = ForeignKey(User)
class Cafe:
name = CharField()
org = ForeignKey(Org)
class Product:
name = CharField()
class Assortment:
cafe = ForeignKey(Cafe)
product = ForeignKey(Product)
price = IntegerField
所以这笔交易是 - 我需要以非常具体的方式搜索产品。 它应该是这样的: /分类/搜索/?searh =可乐
'cafe':{
'id:1,
'name': 'Foo',
'assortment': [
{
'product': {
'id': 1,
'name': 'Cola'
},
'price': 100
},
{
'product': {
'id': 2,
'name': 'Coca-cola'
},
'price': 200,
}
],
'search_count': 5,
},
'cafe': {
'id':2,
'name': 'Bar',
'assortment': [
{
'product': {
'id': 3,
'name': 'Sprite-cola',
},
'price': 150,
},
]
'search_count': 1,
}
所以问题是 - 当我搜索
时Cafe.objects.filter(assortment__product__name='cola')
它有效,它向所有咖啡馆展示名称为“可乐”的产品。存在,但问题是DJF序列化器
class CafeSerialzier:
assortments = AssortmentSerializer(source='assortment_set')
search_count = IntegerField(source='assortment_set.count')
assortments和search_count显示它的所有分类和计数,并且不考虑预期的搜索参数。所以问题是 - 如何将搜索参数传递给source =' assortment_set' (我还需要将结果限制为3)以及如何计算所有搜索结果。
我已经尝试过SerializerMethodField用于assrotments,它解决了我的一部分问题,但它导致了很多查询。
覆盖get_field
方法具有相同的问题。
那么有没有理智的方法来过滤和限制ModelSerializer中的查询集相关字段,并获得相同字段的无限但已过滤的查询集的计数?
答案 0 :(得分:0)
您正试图通过以下方式获取分类资源:/assortment/search/?search=cola
因此您的回复不应包含咖啡馆资源,而应包含以下分类资源:
[
{
'product': {
'id': 1,
'name': 'Cola'
},
'price': 100,
'cafe': 1 # id of the cafe or any extra information
},
{
'product': {
'id': 2,
'name': 'Coca-cola'
},
'price': 200,
'cafe': 1 # id of the cafe or any extra information
}
]
您应该使用ListView
为Assortment
模型创建AssortmentSerializer
。您可以在搜索视图(列表视图)中使用Cafe.objects.filter(assortment__product__name='cola')
,而不是使用Assortment.objects.filter(product__name='cola')
。