我正在尝试根据实例本身在我的ModelSerializer上动态包含/排除特定字段。所以,假设我有一个使用自连接表示地理的分层模型:
class TreeModel():
name = CharField()
kind = CharField(choices=['country', 'state', 'city'])
parent = ForeignKey(self, related_name='children')
考虑到这一点,假设我想隐藏一个实例的'儿童'关系链接,当种类是'状态'时,然后在种类是'国家'时显示它。我尝试摆弄get_fields
方法,但这不起作用。
我希望这样做,因为在我的模型中,TreeModel类的一些实例有数千个子节点,但其他实例只有少数几个。我不想为某些实例类型显示子代,因为它会破坏性能,我只需要它们用于子集。 Thnaks
答案 0 :(得分:3)
This是您正在寻找的。 DRF允许您在序列化程序初始化时动态修改字段。
class TreeSerializer:
def __init__(self , instance , *args , **kwargs ):
super().__init__(instance , *args , **kwargs)
if instance.kind == 'state':
self.fields.pop('children')
#Other Conditions
此示例将成立,因为序列化程序的第一个位置参数始终是模型实例。
在不修改序列化程序的情况下,还有另一种方法:使用Django signals。 这是我的answer演示了如何使用它们
答案 1 :(得分:0)
# serivce name
spring.application.name=student-service
# port
server.port=6161
# eureka server url
eureka.client.service-url.defaultZone=http://localhost:6969/eureka
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true