2016-05-13 9 views
1

内のすべてのデータを取得し、私は、Djangoのアプリケーションを持っていると私はJSON形式またはクエリセット形式ですべての情報を取得しよう:でDjangoの残りのフレームワーク:だから関係

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) 

スタンドアロンスクリプト私は、すべてのデータを取得したいので、私は使用:

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

をそして、これが結果です:

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

あなたが見ることができるように、データの唯一の情報はここにあるが、開発、フローとアプリケーションのない情報...

どれソリューションフローオブジェクトのために開発オブジェクトのすべてのフィールドと同じを取得すると、アプリケーションオブジェクト?

解決策: ありがとうございました!

だから、これは私のserializers.pyです:私のview.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__' 

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')) 

マイ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'), 
] 

じぶんの

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) 

そしてJSONRendererの結果:Djangoの残りシリアライザとスタンドアロンスクリプト

[ 
    { 
    "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 
    }, 
] 

答えて

3

私はあなたがDjangoの残りのフレームワークを使用していると仮定するつもりです。

カスタムシリアライザを作成する必要があります。私はそれをテストしていませんが、それはこのようなものになるだろう:

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

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

これはdevelopmentデータをシリアライズする際DevelopmentSerializerを使用するSegementSerializerに指示します。デフォルトではPrimaryKeyRelatedFieldが使用されているため、ID(この場合は10)だけが表示されます。

+0

助けていただきありがとうございます。私はこの解決策を試します。 –

関連する問題