Django REST Framework create/update 2 nested ForeignKeys -


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