2017-12-03 1 views
0

Ich bin in der Lage, die folgende Antwort von meiner API sans der fett gedruckten Text.Hinzufügen von Attributen zu einer Beziehung in Django Rest Framework mit JSON-API-Format

{ "data": { "type": "Benutzer", "id": "2", "Attribute": { "E-Mail": "[email protected]" " name ": "first lesen", }, "Beziehungen": { "Unternehmen": { "data": { "type": "Business", "id": "1" " Attribute ": { " Name ":" der Punkt :, "Adresse": "foo", } } },

Ich verwende Django Rest Framework JSON Api die Antwort auf JSON Api spec zu formatieren und ich frage mich, was ich tun müssen, um Attribute der Antwort in der Beziehung Objekt hinzugefügt zu bekommen. Es scheint, dass der Business-Serialisierer das Problem ist, aber ihre Dokumentation ist nicht so klar, wie man eine Antwort erhält, die so formatiert ist, wie es stattdessen zeigt, wie man nur den Primärschlüssel des zurückgegebenen Geschäfts erhält. Irgendwelche Ideen?

Mein Serializer sieht wie folgt aus:

from rest_framework import serializers 
from rest_framework_json_api import serializers as srs 
from rest_framework_json_api.relations import ResourceRelatedField, SerializerMethodResourceRelatedField 
from businesses.serializers import BusinessSerializer 
from businesses.models import Business 
from . import models 

class UserSerializer(serializers.ModelSerializer): 

    token = srs.SerializerMethodField() 

    # necessary for M2M fields & reverse FK fields 
    businesses = ResourceRelatedField(read_only=True, allow_null=True) 

    review_user = ResourceRelatedField(read_only=True, allow_null=True, many=True) 
    booking_user = ResourceRelatedField(read_only=True, allow_null=True, many=True) 
    #businesses = serializers.PrimaryKeyRelatedField(queryset=Business.objects.all(), required=False) 
    #businesses = BusinessSerializer(read_only=True) 

    """Meta class tells Django what fields we want to take from the model""" 
    class Meta: 
     # links the serializer to the model class 
     model = models.User 
     # this is a tuple 
     fields = ('id', 'email', 'password', 'name', 'phone', 'location', 'token', 'has_business', 'is_active', 'businesses') 
     extra_kwargs = {'password': {'write_only': True}} 

Antwort

0

Es ist wie die richtige Art und Weise sieht dieses Problem zu umgehen, die folgenden Änderungen an meinem Serializer zu machen:

1) Ordnen Sie das Geschäft Serializer dem Stand der Feld:

businesses = BusinessSerializer(read_only=True) 

2) Das ist, was mich wirklich war eluding, wie ich glaube, dass ich diesen Code in meiner Meta-Klasse verschachtelt, während der Erforschung, die Arbeit nicht. Es sollte in der (in meinem Fall) UserSerializer verschachtelt werden, aber außerhalb der Meta-Klasse:

class JSONAPIMeta: 
     included_resources = ['businesses'] 

Quelle: https://github.com/django-json-api/django-rest-framework-json-api/issues/311

Verwandte Themen