i'm trying model 2 nested foreignkeys data structure this, 'type' , 'source' fields read_only.
[ { "type": "web", "source_alerts": [ { "source": "http://example.com", "alerts": [ { "dns_server": "8.8.4.4", "ip_addr": "213.229.190.11", } ] } ] }, { "type": "dns", "source_alerts": [ { "source": "forinstance.com", "alerts": [ { "dns_server": "8.8.8.8", "ip_resolv": "213.152.6.144", }, { "dns_server": "9.9.8.8", "ip_resolv": "228.48.14.74", } ] }, { "source": "okletsgo.uk", "alerts": [ { "dns_server": "8.8.4.4", "ip_resolv": "213.229.190.11", } ] }, { "source": "gocatgo.com", "alerts": [ { "dns_server": "5.5.2.2", "ip_resolv": "172.68.24.217", } ] } ] } ] what i'm trying browse here: http://myapi.com/get_work//
and able post like:
{ "type": "dns", "source_alerts": [ { "source": "alehop.com", "alerts": [ { "dns_server": "8.8.4.4", "ip_addr": "134.211.190.5", } ] } ] } and create new 'alert' object associated 'source' , 'service'.
could recommend me best way that?
i tryed implement create/update method in serializers in: http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations no success.
---- % models.py % -----
class service(models.model): type = models.charfield() entity = models.foreignkey(entity) class source(models.model): service = models.foreignkey(service, related_name='source_alerts') source = models.charfield(unique=true) class alert(models.model): domain = models.foreignkey(source, related_name='alerts') dns_server = models.genericipaddressfield() ip_addr = models.genericipaddressfield() ---- % routers.py % -----
router = routers.defaultrouter() router.register(r'get_work', views.serviceviewset, base_name='get_work') urlpatterns = patterns('app.views', url(r'^', include(router.urls)) ) ---- % viewsets.py % -----
class serviceviewset(viewsets.modelviewset): queryset = service.objects.all() serializer_class = serviceserializer lookup_field = 'type' ---- % serializers.py % -----
class alertserializer(serializers.modelserializer): class meta: model = dnsalert fields = ('dns_server', 'ip_addr') class sourceserializer(serializers.modelserializer): alerts = alertserializer(many=true) class meta: model = source fields = ('source', 'alerts') def update(self, instance, validated_data): alert_data = validated_data.pop('alerts') alerts = instance.alerts instance.source = validated_data.get('source', instance.source) instance.save() alerts.save() return instance class serviceserializer(serializers.modelserializer): source_alerts = sourceserializer(many=true, read_only=true) class meta: model = service fields = ('type', 'source_alerts') thank in advance!
Comments
Post a Comment