2016-05-13 2 views
1

So habe ich eine Django-Anwendung und ich versuche, alle Informationen im JSON-Format oder QuerySet Format zu erhalten:Django übriges Framework: erhalte alle Daten in Bezug

models.py

class Flow(models.Model): 
    name = models.CharField("nom", primary_key=True, max_length=255) 
    BL_applicative = models.CharField("BL applicative", max_length=255,blank=True, null=True) 
    comment = models.TextField("commentaire", max_length=1500,blank=True,null=True) 
    application = models.ForeignKey('Application', null=True) 

class Development(models.Model): 
    stability = models.IntegerField("stabilité", default=0) 
    unit_test = models.IntegerField("tests unitaires", default=0) 
    documentation = models.IntegerField(default=0) 
    conception = models.IntegerField(default=0) 
    production = models.IntegerField("réalisation", default=0) 
    flow = models.ForeignKey('Flow',blank=True,null=True) 

class Segment(models.Model): 
    index_number = models.IntegerField("indice") 
    chain_batch_fueled = models.CharField(max_length=255, blank=True,null=True) 
    comment = models.TextField("commentaire", max_length=1500, blank=True,null=True) 
    development = models.ForeignKey('Development',verbose_name="Développement", blank=True,null=True) 

In ein eigenständiges Skript ich möchte alle Daten bekommen, so dass ich verwendet:

seg_ser = serializers.serialize('json', Segment.objects.all()) 

Und das ist das Ergebnis:

[ 
    { 
    "model": "dashboard_tibco.segment", 
    "pk": 3, 
    "fields": { 
     "index_number": 1, 
     "chain_batch_fueled": "", 
     "comment": "", 
     "development": 10 
    } 
    }, 
] 

Wie Sie sehen können, nur Informationen von Daten sind hier, aber nicht die Informationen von Entwicklung, Durchfluss- und Anwendung ...

Jede Lösung alle Bereiche des Entwicklungsobjekts und das gleiche für Flußobjekt zu erhalten und Anwendungsobjekt?

Lösung: Danke Jamie für Ihre Hilfe!

Also, das ist mein serializers.py:

from rest_framework import serializers 

from dashboard_tibco.models import Development, Segment 


class DevelopmentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Development 
     fields = '__all__' 


class SegmentSerializer(serializers.ModelSerializer): 
    development = DevelopmentSerializer(read_only=True) 

    class Meta: 
     many = True 
     model = Segment 
     fields = '__all__' 

Mein view.py:

from django.http import HttpResponse 
from dashboard_tibco.transformation_document.document import Document 
def get_json_doc(request): 
    return HttpResponse(Document().get_sql_data_by_application('GRS')) 

Mein urls.py:

from django.conf.urls import url 
from django.contrib import admin 


from dashboard_tibco.views import get_json_doc 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^json', get_json_doc, name='json'), 
] 

Meine Standalone-Skript mit django Rest Serializer:

class Document(object): 
    def __init__(self): 
     /..Make something../ 

    def get_sql_data_by_application(self): 
     serializer = SegmentSerializer(Segment.objects.all(), many=True) 
     return JSONRenderer().render(serializer.data) 

Und das Ergebnis JSONRenderer:

[ 
    { 
    "id": 3, 
    "development": { 
     "id": 10, 
     "status": "En cours", 
     "stability": 0, 
     "unit_test": 0, 
     "documentation": 0, 
     "conception": 0, 
     "production": 0, 
     "modification_date": null, 
     "flow": "Batch", 
     "achievement_lot": null, 
     "project": null 
    }, 
    "name": "", 
    "index_number": 1, 
    "pivot_subscribed": "", 
    "pivot_published": "", 
    "chain_batch_fueled": "", 
    "comment": "", 
    "called": null, 
    "caller": null, 
    "tuxedo_adapter": null 
    }, 
] 

Antwort

3

Ich werde Sie mit der Django-Framework Ruhe zu übernehmen.

Sie müssen einen benutzerdefinierten Serializer erstellen. Ich habe es nicht getestet, aber es wäre so etwas wie diese:

class DevelopmentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Development 

class SegmentSerializer(serializers.ModelSerializer): 
    development = DevelopmentSerializer(read_only=True) 
    class Meta: 
     many = True 
     model = Segment 

Dies teilt die SegementSerializer die DevelopmentSerializer zu verwenden, wenn die Serialisierung development Daten. Standardmäßig verwendet es eine PrimaryKeyRelatedField, weshalb Sie nur die ID (in diesem Fall 10) sehen.

+0

Danke für Hilfe, ich werde diese Lösung versuchen. –

Verwandte Themen