Итак, я пытаюсь создать сериализатор, который бы возвращал кучу деталей модели 'Post' в моем проекте, но я также хочу получить подробности о вложенном объекте, вывод которого я покажу ниже :
Пост-модель:
class Post(models.Model):
# Base post attributes
user = models.ForeignKey(UserOfApp, related_name="posts", on_delete=models.CASCADE)
...
# Repost post attributes
original_repost = models.ForeignKey(
to="self",
related_name="reposted_post",
null=True,
blank=True,
on_delete=models.CASCADE,
)
# Quote post attributes
is_quote_post = models.BooleanField(default=False)
quoted_post = models.ForeignKey(
to="self", null=True, blank=True, on_delete=models.CASCADE
)
...
Мой сериализатор, использующий глубину:
class HomeSerializer(serializers.ModelSerializer):
id_str = serializers.ReadOnlyField()
...
quoted_post_id_str = serializers.ReadOnlyField()
class Meta:
model = Post
depth = 2
fields = "__all__"
Это дает мне вывод Например, проблема в том, что он возвращает все конфиденциальные данные из моей пользовательской модели, например, «пароль» и т. д. c:
{
"id": 16,
...
"is_quote_post": false,
"user": {
"id": 1,
"password": "pbkdf2_sha256$180000$ni6drJvLjUU2$xoMt5tpJmz8TlmORfB/eTkYlGGpUGfriGz8rO7kVB8E=",
"last_login": "2020-03-21T06:20:48Z",
"is_superuser": true,
"username": "manas",
"first_name": "Manas",
"last_name": "Acharekar",
"email": "manas.acharekar98@gmail.com",
"is_staff": true,
"is_active": true,
"date_joined": "2020-03-01T18:42:11Z",
"dob": "1998-11-11",
"gender": "M",
"bio": "i own this place",
"location": "",
"website": "",
"verified": true,
"followers": [],
"friends": [],
"groups": [],
"user_permissions": []
},
"original_repost": {
"id": 1,
...
"user": {
"id": 1,
"password": "pbkdf2_sha256$180000$ni6drJvLjUU2$xoMt5tpJmz8TlmORfB/eTkYlGGpUGfriGz8rO7kVB8E=",
"last_login": "2020-03-21T06:20:48Z",
"is_superuser": true,
"username": "manas",
"first_name": "Manas",
"last_name": "Acharekar",
"email": "manas.acharekar98@gmail.com",
"is_staff": true,
"is_active": true,
"date_joined": "2020-03-01T18:42:11Z",
"dob": "1998-11-11",
"gender": "M",
"bio": "i own this place",
"location": "",
"website": "",
"verified": true,
"followers": [],
"friends": [],
"groups": [],
"user_permissions": []
},
"original_repost": null,
"quoted_post": null
},
"quoted_post": null
}
Мой сериализатор, без использования глубины:
class HomeSerializer(serializers.ModelSerializer):
user = UserSerializer()
id_str = serializers.ReadOnlyField()
...
quoted_post_id_str = serializers.ReadOnlyField()
quoted_post = PostSerializer()
original_repost = PostSerializer()
class Meta:
model = Post
fields = "__all__"
Это выводит сообщения должным образом, но я не могу получить полный вложенный объект. В возврате JSON, указанном ниже, я хочу получить доступ к quoted_post.user или original_repost.user , но возвращается только внешний ключ:
{
"id": 16,
"user": {
"id": 1,
"followers_count": 0,
"friends_count": 0,
"username": "manas",
"first_name": "Manas",
"last_name": "Acharekar",
"email": "manas.acharekar98@gmail.com",
"date_joined": "2020-03-01T18:42:11Z",
"dob": "1998-11-11",
"gender": "M",
"bio": "i own this place",
"location": "",
"website": "",
"verified": true,
"followers": [],
"friends": []
},
"id_str": "16",
...
"quoted_post": null,
"original_repost": {
"id": 1,
...
"is_quote_post": false,
"user": 1,
"original_repost": null,
"quoted_post": null
},
...
"is_quote_post": false
}
Как именно решить эту проблему?