Django access nested object field in serializer
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I Django-Rest
have a class User
that contain the field first_name
, and a class Account
that contain the fields username
and a_class_ref
that is a one-to-one'
relation.
How it is possible in the serializer of B
to do something like :
class AccountSerializer():
class Meta:
model= Account
fields= [
'username',
'firstname`
]
Account :
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
def username(self):
return self.user.username <== this is the solution that I'm trying to avoid
And User
is the extended AbstractUser
from Django-rest-framework, that comes with a first_name = models.CharField(_('first name'), max_length=30, blank=True)
Thank you
python django django-rest-framework
add a comment |
I Django-Rest
have a class User
that contain the field first_name
, and a class Account
that contain the fields username
and a_class_ref
that is a one-to-one'
relation.
How it is possible in the serializer of B
to do something like :
class AccountSerializer():
class Meta:
model= Account
fields= [
'username',
'firstname`
]
Account :
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
def username(self):
return self.user.username <== this is the solution that I'm trying to avoid
And User
is the extended AbstractUser
from Django-rest-framework, that comes with a first_name = models.CharField(_('first name'), max_length=30, blank=True)
Thank you
python django django-rest-framework
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52
add a comment |
I Django-Rest
have a class User
that contain the field first_name
, and a class Account
that contain the fields username
and a_class_ref
that is a one-to-one'
relation.
How it is possible in the serializer of B
to do something like :
class AccountSerializer():
class Meta:
model= Account
fields= [
'username',
'firstname`
]
Account :
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
def username(self):
return self.user.username <== this is the solution that I'm trying to avoid
And User
is the extended AbstractUser
from Django-rest-framework, that comes with a first_name = models.CharField(_('first name'), max_length=30, blank=True)
Thank you
python django django-rest-framework
I Django-Rest
have a class User
that contain the field first_name
, and a class Account
that contain the fields username
and a_class_ref
that is a one-to-one'
relation.
How it is possible in the serializer of B
to do something like :
class AccountSerializer():
class Meta:
model= Account
fields= [
'username',
'firstname`
]
Account :
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
def username(self):
return self.user.username <== this is the solution that I'm trying to avoid
And User
is the extended AbstractUser
from Django-rest-framework, that comes with a first_name = models.CharField(_('first name'), max_length=30, blank=True)
Thank you
python django django-rest-framework
python django django-rest-framework
edited Nov 16 '18 at 20:01
Boris Le Méec
asked Nov 16 '18 at 19:16
Boris Le MéecBoris Le Méec
767522
767522
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52
add a comment |
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52
add a comment |
1 Answer
1
active
oldest
votes
You can declare a custom field with the source
attribute:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Edit
Based on the models you posted, the following should work:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
It sounds like it is exactly what I was looking for, but I still have this exception :django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account isB
, and firstname isa_field
)
– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, inB
,A
is aone-to-one
relation field
– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly accessa_fileld
. Note that I'm going viaa_class_ref
. What is the field name onAccount
that you use to reference the other model?
– slider
Nov 16 '18 at 19:34
I wrotefirstname = serializers.CharField(source='user.firstname')
anduser
is theone-to-one
related field in theB
class, that refers to theA
class
– Boris Le Méec
Nov 16 '18 at 19:38
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
|
show 5 more comments
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',
autoActivateHeartbeat: false,
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53344075%2fdjango-access-nested-object-field-in-serializer%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can declare a custom field with the source
attribute:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Edit
Based on the models you posted, the following should work:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
It sounds like it is exactly what I was looking for, but I still have this exception :django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account isB
, and firstname isa_field
)
– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, inB
,A
is aone-to-one
relation field
– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly accessa_fileld
. Note that I'm going viaa_class_ref
. What is the field name onAccount
that you use to reference the other model?
– slider
Nov 16 '18 at 19:34
I wrotefirstname = serializers.CharField(source='user.firstname')
anduser
is theone-to-one
related field in theB
class, that refers to theA
class
– Boris Le Méec
Nov 16 '18 at 19:38
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
|
show 5 more comments
You can declare a custom field with the source
attribute:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Edit
Based on the models you posted, the following should work:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
It sounds like it is exactly what I was looking for, but I still have this exception :django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account isB
, and firstname isa_field
)
– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, inB
,A
is aone-to-one
relation field
– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly accessa_fileld
. Note that I'm going viaa_class_ref
. What is the field name onAccount
that you use to reference the other model?
– slider
Nov 16 '18 at 19:34
I wrotefirstname = serializers.CharField(source='user.firstname')
anduser
is theone-to-one
related field in theB
class, that refers to theA
class
– Boris Le Méec
Nov 16 '18 at 19:38
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
|
show 5 more comments
You can declare a custom field with the source
attribute:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Edit
Based on the models you posted, the following should work:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
You can declare a custom field with the source
attribute:
class BSerializer(serializers.ModelSerializer):
a_field = serializers.CharField(source='a_class_ref.a_field')
class Meta:
model= B
fields= ['b_field', 'a_field']
Edit
Based on the models you posted, the following should work:
class Account(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
related_name='account',
on_delete=models.CASCADE
)
class AccountSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
firstname = serializers.CharField(source='user.first_name')
class Meta:
model= Account
fields= ['username', 'firstname']
edited Nov 16 '18 at 20:35
answered Nov 16 '18 at 19:23
sliderslider
8,56811331
8,56811331
It sounds like it is exactly what I was looking for, but I still have this exception :django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account isB
, and firstname isa_field
)
– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, inB
,A
is aone-to-one
relation field
– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly accessa_fileld
. Note that I'm going viaa_class_ref
. What is the field name onAccount
that you use to reference the other model?
– slider
Nov 16 '18 at 19:34
I wrotefirstname = serializers.CharField(source='user.firstname')
anduser
is theone-to-one
related field in theB
class, that refers to theA
class
– Boris Le Méec
Nov 16 '18 at 19:38
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
|
show 5 more comments
It sounds like it is exactly what I was looking for, but I still have this exception :django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account isB
, and firstname isa_field
)
– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, inB
,A
is aone-to-one
relation field
– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly accessa_fileld
. Note that I'm going viaa_class_ref
. What is the field name onAccount
that you use to reference the other model?
– slider
Nov 16 '18 at 19:34
I wrotefirstname = serializers.CharField(source='user.firstname')
anduser
is theone-to-one
related field in theB
class, that refers to theA
class
– Boris Le Méec
Nov 16 '18 at 19:38
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
It sounds like it is exactly what I was looking for, but I still have this exception :
django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account is B
, and firstname is a_field
)– Boris Le Méec
Nov 16 '18 at 19:27
It sounds like it is exactly what I was looking for, but I still have this exception :
django.core.exceptions.ImproperlyConfigured: Field name firstname is not valid for model Account.
(Account is B
, and firstname is a_field
)– Boris Le Méec
Nov 16 '18 at 19:27
I edited my original post, in
B
, A
is a one-to-one
relation field– Boris Le Méec
Nov 16 '18 at 19:32
I edited my original post, in
B
, A
is a one-to-one
relation field– Boris Le Méec
Nov 16 '18 at 19:32
@BorisLeMéec you can't directly access
a_fileld
. Note that I'm going via a_class_ref
. What is the field name on Account
that you use to reference the other model?– slider
Nov 16 '18 at 19:34
@BorisLeMéec you can't directly access
a_fileld
. Note that I'm going via a_class_ref
. What is the field name on Account
that you use to reference the other model?– slider
Nov 16 '18 at 19:34
I wrote
firstname = serializers.CharField(source='user.firstname')
and user
is the one-to-one
related field in the B
class, that refers to the A
class– Boris Le Méec
Nov 16 '18 at 19:38
I wrote
firstname = serializers.CharField(source='user.firstname')
and user
is the one-to-one
related field in the B
class, that refers to the A
class– Boris Le Méec
Nov 16 '18 at 19:38
1
1
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
That was probably a typo mistake, I just copy paste your code and it's working now thank you !
– Boris Le Méec
Nov 16 '18 at 20:41
|
show 5 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53344075%2fdjango-access-nested-object-field-in-serializer%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
you will need to create a serializer in order to display the information of a_class_ref, looks for nested serializer in the documentation
– Xepe
Nov 16 '18 at 19:18
Yes but I'd like to do it a way that at the end, the json is not in "nested format", so it's transparent to the user
– Boris Le Méec
Nov 16 '18 at 19:23
May you add the model's code? Also if instead of using those cryptic names you used the real ones it would be easier to help you.
– grouchoboy
Nov 16 '18 at 19:52