用于mongo和django的DRF中的嵌入序列化器
我想在Django Rest Framework中创建一个非模型嵌入序列化器。我被困在这里。需要你的帮助。提前致谢。用于mongo和django的DRF中的嵌入序列化器
class IPNetwork(serializers.ListSerializer):
network_netmask = serializers.IPAddressField(required=False)
network_gateway = serializers.IPAddressField(required=False)
network_mac = serializers.CharField(required=False)
network_dns = serializers.ListField(required=False)
network_ip = serializers.IPAddressField(required=False)
class RouterInfoSerializer(serializers.Serializer):
router_name = serializers.CharField(required=False)
router_ip_networks = IPNetwork(many=True)
router_devices = serializers.ListField(required=False)
我使用DRF序列化器对API数据进行身份验证,但将其存储在mongoDB中。所以我不能使用Model Serializer。 所以我想知道是否有任何方法可以在不使用Model序列化器的情况下编写嵌套序列化器。嵌套串行提到here
我的样本输入数据将在此格式
{
"name": "Test Router",
"ip_networks":[
{
"ip": "192.168.1.1",
"netmask": "255.255.255.0",
"gateway": "192.168.1.1",
"mac": "EA:8C:0C:1F:BC:DC",
"dns": ["8.8.8.8", "8.8.4.4"]
}
],
"router_devices": ["List of clients connected"]
}
在此数据输入,我想也验证IP数据的串行器,然后调用保存功能。
我想类似的嵌入式mongoengine
文件的东西在这里最大的问题是,你有IPNetwork(many=True)
并设置IPNetwork
为ListSerializer
。
应该知道这是redondant,因为许多= True会在场景后面创建一个ListSerializer
。另请注意,ListSerializer
旨在用于与您的实现不同的子序列化器。
因此,你应该简单地让IPNetwork
继承自serializers.Serializer
,你应该很好去。
非模型序列化器的工作原理大多与ModelSerializers
相同,只是它们返回python字典,除非创建/更新被覆盖。请注意,在你使用嵌套序列化器的情况下,无论如何都应该重写这两个方法。
谢谢。继承自serializers.Serializer。但没有实现创建/更新功能。仅使用序列化器进行数据验证。 –
好的。所以这就是我的做法,它很棒。
class IPNetwork(serializers.Serializer):
network_netmask = serializers.IPAddressField(required=True)
network_gateway = serializers.IPAddressField(required=True)
network_mac = serializers.CharField(required=True)
network_dns = serializers.ListField(required=True)
network_ip = serializers.IPAddressField(required=True)
class RouterInfoSerializer(serializers.Serializer):
router_name = serializers.CharField(required=True)
router_ip_networks = serializers.ListField(required=True)
router_devices = serializers.ListField(required=False)
def validate_router_ip_networks(self, value):
if not IPNetwork(data=value, many=True).is_valid():
raise serializers.ValidationError("Router IP network data is invalid")
return value
让我知道这个代码或任何人有任何问题有任何疑问。
对不起,你被困住了,但我不知道你在找什么帮助。也许从解释不起作用开始。 – Linovia