我有一个模型结构,其中一个Outage
有许多Product
,每个Product
都与一个Client
相关联。在
当我获得客户机的停机列表时,我可以使用OutageSerializer
来确保停机中列出的产品属于该客户机,如下所示:
class OutageSerializer(serializers.ModelSerializer):
class Meta:
model = Outage
def __init__(self, *args, **kwargs):
super(OutageSerializer, self).__init__(*args, **kwargs)
client_id = self.context.get("client_id")
if client_id:
if 'products' in self.fields and \
hasattr(self.fields['products'], 'child_relation'):
product_ids = ClientManager(client_id).client_products().\
values_list('pk', flat=True)
self.fields['products'].child_relation.queryset = \
self.fields['products'].child_relation.queryset.\
filter(id__in=product_ids)
但是,如果我只通过RetrieveAPIView
得到一次中断,那么child_relation
属性就不再可用了,所以我必须寻找其他方法。在
目前,我正在检查*args的长度,并在那里放置一个products字段的过滤器,如下所示:
^{pr2}$请记住,products字段不是我要过滤的唯一字段。在
目前,API仅用于GET。在
虽然这种方法“有效”,但似乎有点混乱。是否有一种首选的标准方法来筛选RetrieveAPIView
s的列表字段?在
如果}的FKs,则可以使用
Product
具有Outage
和{SerializerMethodField
。在相关问题 更多 >
编程相关推荐