Я хочу настроить возвращаемый объект сериализатора django rest framework в соответствии с конкретными требованиями.прямо сейчас он возвращает поля в одном объекте, который не является вложенным.
{
"id": 9,
"namespace": "steve",
"path": "something/another",
"value": "this is a value"
},
и вот как я хочу, чтобы результат выглядел следующим образом:
{
"id": 6,
"namespace": "tempnamespaced",
"path": "randompath",
"value": "anothertest",
"user": {
"userId": "testUser1"
}
}
Поэтому я хочу добавить вложенный объект с именем user и добавить значение userID внутри пользователя.
данные, которые возвращаются в userId, на самом деле являются person.username person - это имя пользователя модели, поэтому данные будут выглядеть так, когда они назначены и возвращены:
"user": {
"userId": {{person.username}}
}
Iприкрепит код MMY ниже:
сериализатор:
from rest_framework import serializers
from .models import Preference
from django.contrib.auth.models import User
class PreferenceSerializer(serializers.ModelSerializer):
# person = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(),)
class Meta:
model = Preference
fields = ('id', 'namespace', 'path', 'value')
здесь - набор параметров get:
@permission_classes((IsAuthenticated))
def get_queryset(self):
namespace = self.kwargs.get('namespace', None)
path = self.kwargs.get('path', None)
if namespace is None and path is None:
queryset = Preference.objects.all().filter(user_id=1)
if namespace and path is None:
queryset = Preference.objects.all().filter(user_id=1, namespace=namespace)
if namespace and path:
queryset = Preference.objects.all().filter(user_id=1, namespace=namespace, path=path)
return queryset
здесь режим:
from django.db import models
from django.contrib.auth.models import User
from owf_framework.people.models import Person
class Preference(models.Model):
id = models.BigAutoField(primary_key=True, null=False)
version = models.BigIntegerField(default=1, null=False)
path = models.CharField(max_length=200, null=False)
namespace = models.CharField(max_length=200, null=False)
value = models.TextField(null=False)
user_id = models.BigIntegerField(null=False, default=1)
person = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.namespace
class Meta:
db_table = 'preference'