Shiv Bagdi
Shiv Bagdi

Reputation: 1

user data from user models with foreign key

I am new to django and trying a project to authenticate user using token and then user can post a msg on server in response user get msg he created and also has user_id, username and email.

This is a sample of what I want:

{

    "id": 102,
    "message": "Lorem ipsum",
    "created_at": "created time in UTC",
    "updated_at": "last updated time in UTC",
    "created_by": {
                    "id": 3,
                    "username": "testuser",
                    "email": "[email protected]",
                    ...
    }
}

This is what I get:

{
    "id": 2,
    "msg": "hello",
    "created_at": "2022-05-23T08:08:57.758428Z",
    "updated_at": "2022-05-23T08:08:57.758428Z",
    "created_by": null
}

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.conf import settings

class MsgModel(models.Model):
    id = models.IntegerField(primary_key=True)
    msg = models.CharField(max_length=100)
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(default=timezone.now)
    created_by = models.ForeignKey(User, db_column='username', null=True, on_delete=models.CASCADE)

def __str__(self):
    return self.msg

serializers.py

from rest_framework import serializers
from .models import MsgModel

class MsgSer(serializers.ModelSerializer):
    class Meta:
        model = MsgModel
        fields = "__all__"

Upvotes: 0

Views: 57

Answers (1)

Tamzid Ahmed
Tamzid Ahmed

Reputation: 640

You need to include foreign table using serializers like this:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

class MsgSer(serializers.ModelSerializer):
    created_by = UserSerializer(read_only=True, many=True)

    class Meta:
        model = MsgModel
        fields = ['id', 'msg', 'created_at', 'updated_at', 'created_by']

Upvotes: 1

Related Questions