0

私は基本的に私は私のファーマーにユーザからFIRST_NAME &のlast_nameを使用したいとしたいユーザー の拡張であるファーマーモデルを持っていますそれらもシリアル化してください。Djangoのcustonユーザモデル/シリアライザ

私のmodels.pyには、以下のようになります。

{ "ユーザー" を次のように

class UserSerializer(serializers.ModelSerializer): 
first_name = serializers.CharField(required=True) 
last_name = serializers.CharField(required=True) 
class Meta: 
    model = User 
    fields = ('first_name', 'last_name') 


class FarmerSerializer(serializers.ModelSerializer): 
user = UserSerializer() 
... 
... 
class Meta: 
    model = Farmer 
    fields = ('user','birth_date', 'email', 'phone_number') 

たため、私はJSONを取得

class Farmer(models.Model): 

    #Field for refering the default user 
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) 

    def __str__(self):    # __unicode__ on Python 2 
    return "%s the farmer" % self.user.username 

私serializers.pyは次のようになります。 :{"first_name": "Jannes"、 "last_name": "Stubbi"}、 "birth_date": "2016-04-13"、 "email": "[email protected]"、 "phone_num FIRST_NAME ": "Jannes"、" 姓 ": "Stubbi"、" Birth_DateのBER ": ""

{私はむしろとしてデータを取得したい

}、" 4912345678 「: "2016年4月13日"、 "電子メール": "[email protected]"、 "PHONE_NUMBER": "4912345678" }

私のviews.py

class JSONResponse(HttpResponse): 
    """ 
    An HttpResponse that renders its content into JSON. 
    """ 
    def __init__(self, data, **kwargs): 
    content = JSONRenderer().render(data) 
    kwargs['content_type'] = 'application/json' 
    super(JSONResponse, self).__init__(content, **kwargs) 


#view to get the details of all the farmers 
@api_view(('GET',)) 
def get_all_farmers_details(request): 

#Fetch all the farmers from database 
results = Farmer.objects.all() 
#Serialize the obtained results 
serializer = FarmerSerializer(results, many=True) 
return Response(serializer.data) 

どのようにすることができますこれを達成するには?

+0

これは見ましたか? http://stackoverflow.com/questions/15453072/django-serializers-to-json-custom-json-output-format –

+0

'view'クラスも更新できます –

+0

views.pyで更新しました。本質的にシリアライザは、ネストされていないクリーンな方法でデータを返す必要があります – Nitish

答えて

0

あなたはviewによって返さserializer.dataを変更することができます。

@api_view(('GET',)) 
def get_all_farmers_details(request): 

    #Fetch all the farmers from database 
    results = Farmer.objects.all() 
    #Serialize the obtained results 
    serializer = FarmerSerializer(results, many=True) 

    userDict = serializer.data.pop("user", None) 
    if userDict is not None: 
     serializer.data['first_name'] = userDict['first_name'] 
     serializer.data['last_name'] = userDict['last_name'] 

    return Response(serializer.data) 
1

は、あなたがこのような何かを試すことができますように。

class FarmerSerializer(serializers.ModelSerializer): 
    first_name = serializers.CharField(source='user.first_name') 
    last_name = serializers.CharField(source='user.last_name') 
    .. 
    .. 
    class Meta: 
     model = Farmer 
     fields = ('first_name', 'last_name', 'phone_number', 'email') 

トリックは 'source'属性を使用することです。

関連する問題