Django Serilizer: Getting an ordered dictionary in embeded serializer











up vote
1
down vote

favorite












I'm one serializer inside another to show information from one model, and selected fields from another in the same response.



This looks like this:



class SimpleRouteClientConstraintSerializer(serializers.ModelSerializer):

name = serializers.SerializerMethodField()

def get_name(self, obj):
default_constraint = RouteDefaultConstraint.objects.get(pk=obj.route_default_constraint_id)
return default_constraint.name

class Meta:
model = RouteClientConstraint
fields = ('name', 'value')

class RouteSerializer(serializers.ModelSerializer):
...
# Calling first serializer here
routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False)
...

class Meta:
model = Route
fields = (..., 'routeClientConstraints', ...)
depth = 1


When running the RouteSerilalizer, i want a response:



'routeClientConstraints': [{
'name': 'my name'
'value': 'confused'
},
...
]


If i use the serializer as in the code above, I get



'routeClientConstraints': [
OrderedDict([
('name', 'Minimum life boats'),
('value', '6')
])
]


I tried changing the serializer to: routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False).data, which i expected would give me json format, but i got this:



'routeClientConstraints': [
OrderedDict([
('id', 1),
('value', '6'),
('created_at', '2018-11-10T14:17:39.263848Z'),
('updated_at', '2018-11-10T14:17:39.263861Z'),
('route_default_constraint', 1),
('route', 1)])
]


How do i return a list of dictionaries?










share|improve this question
























  • An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
    – Will Keeling
    Nov 10 at 21:40















up vote
1
down vote

favorite












I'm one serializer inside another to show information from one model, and selected fields from another in the same response.



This looks like this:



class SimpleRouteClientConstraintSerializer(serializers.ModelSerializer):

name = serializers.SerializerMethodField()

def get_name(self, obj):
default_constraint = RouteDefaultConstraint.objects.get(pk=obj.route_default_constraint_id)
return default_constraint.name

class Meta:
model = RouteClientConstraint
fields = ('name', 'value')

class RouteSerializer(serializers.ModelSerializer):
...
# Calling first serializer here
routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False)
...

class Meta:
model = Route
fields = (..., 'routeClientConstraints', ...)
depth = 1


When running the RouteSerilalizer, i want a response:



'routeClientConstraints': [{
'name': 'my name'
'value': 'confused'
},
...
]


If i use the serializer as in the code above, I get



'routeClientConstraints': [
OrderedDict([
('name', 'Minimum life boats'),
('value', '6')
])
]


I tried changing the serializer to: routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False).data, which i expected would give me json format, but i got this:



'routeClientConstraints': [
OrderedDict([
('id', 1),
('value', '6'),
('created_at', '2018-11-10T14:17:39.263848Z'),
('updated_at', '2018-11-10T14:17:39.263861Z'),
('route_default_constraint', 1),
('route', 1)])
]


How do i return a list of dictionaries?










share|improve this question
























  • An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
    – Will Keeling
    Nov 10 at 21:40













up vote
1
down vote

favorite









up vote
1
down vote

favorite











I'm one serializer inside another to show information from one model, and selected fields from another in the same response.



This looks like this:



class SimpleRouteClientConstraintSerializer(serializers.ModelSerializer):

name = serializers.SerializerMethodField()

def get_name(self, obj):
default_constraint = RouteDefaultConstraint.objects.get(pk=obj.route_default_constraint_id)
return default_constraint.name

class Meta:
model = RouteClientConstraint
fields = ('name', 'value')

class RouteSerializer(serializers.ModelSerializer):
...
# Calling first serializer here
routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False)
...

class Meta:
model = Route
fields = (..., 'routeClientConstraints', ...)
depth = 1


When running the RouteSerilalizer, i want a response:



'routeClientConstraints': [{
'name': 'my name'
'value': 'confused'
},
...
]


If i use the serializer as in the code above, I get



'routeClientConstraints': [
OrderedDict([
('name', 'Minimum life boats'),
('value', '6')
])
]


I tried changing the serializer to: routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False).data, which i expected would give me json format, but i got this:



'routeClientConstraints': [
OrderedDict([
('id', 1),
('value', '6'),
('created_at', '2018-11-10T14:17:39.263848Z'),
('updated_at', '2018-11-10T14:17:39.263861Z'),
('route_default_constraint', 1),
('route', 1)])
]


How do i return a list of dictionaries?










share|improve this question















I'm one serializer inside another to show information from one model, and selected fields from another in the same response.



This looks like this:



class SimpleRouteClientConstraintSerializer(serializers.ModelSerializer):

name = serializers.SerializerMethodField()

def get_name(self, obj):
default_constraint = RouteDefaultConstraint.objects.get(pk=obj.route_default_constraint_id)
return default_constraint.name

class Meta:
model = RouteClientConstraint
fields = ('name', 'value')

class RouteSerializer(serializers.ModelSerializer):
...
# Calling first serializer here
routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False)
...

class Meta:
model = Route
fields = (..., 'routeClientConstraints', ...)
depth = 1


When running the RouteSerilalizer, i want a response:



'routeClientConstraints': [{
'name': 'my name'
'value': 'confused'
},
...
]


If i use the serializer as in the code above, I get



'routeClientConstraints': [
OrderedDict([
('name', 'Minimum life boats'),
('value', '6')
])
]


I tried changing the serializer to: routeClientConstraints = SimpleRouteClientConstraintSerializer(many=True, required=False).data, which i expected would give me json format, but i got this:



'routeClientConstraints': [
OrderedDict([
('id', 1),
('value', '6'),
('created_at', '2018-11-10T14:17:39.263848Z'),
('updated_at', '2018-11-10T14:17:39.263861Z'),
('route_default_constraint', 1),
('route', 1)])
]


How do i return a list of dictionaries?







python django django-serializer






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 10 at 16:33

























asked Nov 10 at 14:41









User632716

2,38911233




2,38911233












  • An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
    – Will Keeling
    Nov 10 at 21:40


















  • An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
    – Will Keeling
    Nov 10 at 21:40
















An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
– Will Keeling
Nov 10 at 21:40




An OrderedDict is a dictionary. When it is converted to JSON it will do the right thing.
– Will Keeling
Nov 10 at 21:40

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240027%2fdjango-serilizer-getting-an-ordered-dictionary-in-embeded-serializer%23new-answer', 'question_page');
}
);

Post as a guest





































active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















 

draft saved


draft discarded



















































 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240027%2fdjango-serilizer-getting-an-ordered-dictionary-in-embeded-serializer%23new-answer', 'question_page');
}
);

Post as a guest




















































































Popular posts from this blog

Bressuire

Vorschmack

Quarantine