Получить идентификатор объекта MongoDb в Django Serializer
Я создаю Django сервер, используя django_rest_framework и mondogb(djongo). Я хочу использовать сгенерированный mongoDb ObjectId в качестве первичного ключа. Как получить mongoDb ObjectId из класса сериализатора?
Это моя модель пользователя
class User(AbstractUser):
name = models.CharField(max_length=255)
description = models.TextField(default='', blank=True)
profile_pic = models.ImageField(upload_to='static/profile_pics/', blank=True)
username = models.CharField(max_length=255, unique=True)
password = models.CharField(max_length=255)
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = []
Это мой пользовательский сериализатор
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'password', 'name', 'description', 'profile_pic']
extra_kwargs = {
'password': {'write_only': True}
}
views.py
class GetUserView(APIView):
def get(self, request):
data = UserSerializer(User.objects.filter(id=request.id)).data
return Response(data)
Возвращается объект json
{
'id': '<id>' eg: 1 or 2 or 3 etc..
'name': '<user-name>',
'username': '<username>',
'description': '<description>',
'profile_pic': '<profile_pic>'
}
Но я хочу получить нижеупомянутый id (mongoDb ObjectId)
{
'id': 621343a45048323e635c4ae6
...
}
Ваша модель пользователя должна наследоваться от базовой модели Djongo. Но в этом случае вы потеряете многие функциональные возможности, которые появляются при наследовании от класса AbstractUser. Мой совет - использовать реляционную базу данных для вашей таблицы пользователей, затем вы можете направить другие таблицы на использование mongodb.
возможно, взгляните на это: Здесь объясняется, как Django лучше подходит для реляционных баз данных.