Python 想要加入三个模型并获得API输出吗

Python 想要加入三个模型并获得API输出吗,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有三种型号。Django默认用户,Blogs和UserActive。我希望获得如下APi输出: [ { "blog_id": 1, "user": { "id": 1, "username": "superuser", "email": "superuse

我有三种型号。Django默认用户,Blogs和UserActive。我希望获得如下APi输出:

[
    {
        "blog_id": 1,
        "user": {
            "id": 1,
            "username": "superuser",
            "email": "superuser@email.com",
            "first_name": "",
            "is_staff": true
            "last_active": "2021-04-12T13:36:47.367153Z"
        },
        "title": "first blog",
        "description": "hola",
        "image": "/images/phone.jpg",
        "create_at": "2021-04-08T14:24:51.122272Z",
        "update_at": "2021-04-08T14:37:00.287746Z"
    }
]
但我仅使用
get\u blogs(request):
from views.py在api上获得此输出,其中不包括来自UserActive模型的
last\u active
,我想包括它:

[
    {
        "blog_id": 1,
        "user": {
            "id": 1,
            "username": "superuser",
            "email": "superuser@email.com",
            "first_name": "",
            "is_staff": true
        },
        "title": "first blog",
        "description": "hola",
        "image": "/images/phone.jpg",
        "create_at": "2021-04-08T14:24:51.122272Z",
        "update_at": "2021-04-08T14:37:00.287746Z"
    }
]
这是我的模特

class UserActive(models.Model):
    user_active_id = models.AutoField(primary_key=True, editable=False, null=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=False)
    last_active = models.DateTimeField(auto_now_add=True, editable=False)


class Blog(models.Model):
    blog_id = models.AutoField(primary_key=True, editable=False)
    title = models.CharField(max_length=128,null=False,blank=False)
    description = models.TextField(null=True,blank=True)
    image=models.ImageField(null=True,blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    create_at = models.DateTimeField(auto_now_add=True, editable=False)
    update_at =  models.DateTimeField(auto_now=True,editable=False)

这里是views.py:

@api_view(['GET'])
def get_users(request):
    user = User.objects.all().select_related('useractive')
    serializer = UserSerializer(user, many=True)
    return Response(serializer.data)


@api_view(['GET'])
def get_blogs(request):
    blogs = Blog.objects.all()
    serializer = BlogSerializers(blogs, many=True)
    return Response(serializer.data)
下面是serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', ]



class UserActiveSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = UserActive
        fields = '__all__'

class BlogSerializers(serializers.ModelSerializer):
    user = UserSerializer()
    class Meta:
        model = Blog
        fields = '__all__'

您需要具有从
User
UserActive
的反向关系,才能在
UserSerializer
中获取该字段

型号:

class UserActive(models.Model):
    user_active_id = models.AutoField(primary_key=True, editable=False, null=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=False, related_name='user_active')
    last_active = models.DateTimeField(auto_now_add=True, editable=False)
class UserActive(models.Model):
    user_active_id = models.AutoField(primary_key=True, editable=False, null=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=False, related_name='user_active')
    last_active = models.DateTimeField(auto_now_add=True, editable=False)
序列化程序:

class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']
class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']

您需要具有从
User
UserActive
的反向关系,才能在
UserSerializer
中获取该字段

型号:

class UserActive(models.Model):
    user_active_id = models.AutoField(primary_key=True, editable=False, null=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=False, related_name='user_active')
    last_active = models.DateTimeField(auto_now_add=True, editable=False)
class UserActive(models.Model):
    user_active_id = models.AutoField(primary_key=True, editable=False, null=False)
    user = models.OneToOneField(User, on_delete=models.CASCADE,null=False, related_name='user_active')
    last_active = models.DateTimeField(auto_now_add=True, editable=False)
序列化程序:

class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']
class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']

UserSerializer中需要少量修改。应该使用
serializers.DateTimeField()
而不是
serializers.DateField()
型号:

序列化程序:

class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']
class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']

UserSerializer中需要少量修改。应该使用
serializers.DateTimeField()
而不是
serializers.DateField()
型号:

序列化程序:

class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']
class UserSerializer(serializers.ModelSerializer):
    last_active = serializers.DateTimeField(source='user_active.last_active', read_only=True)
    class Meta:
        model = User
        fields = ['id',  'username', 'email', 'first_name', 'is_staff', 'last_active']

在BlogSerializer中的字段下方添加depth=1,您将获得所需的输出没有改进相同的输出
类BlogSerializer(serializers.ModelSerializer):user=UserSerializer()类Meta:model=Blog字段='\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,您将获得所需的输出没有改进相同的输出
类blogserializer(serializers.ModelSerializer):user=UserSerializer()类Meta:model=Blog字段='\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。需要用户
serializers.DateTimeField()
而不是``serializers.DateField()``完整的序列化程序是:`class UserSerializer(serializers.ModelSerializer):last\u active=serializers.DateTimeField(source='user\u active.last\u active',read only=True)class Meta:model=用户字段=['id'、'username'、'email'、'first_name'、'is_staff'、'last_active']`@techbuildie啊,对了!我的错我没有注意到。我会编辑响应它只做了一点修改。需要使用
序列化程序。DateTimeField()
而不是“serializers.DateField()”``完整的序列化程序是::`class UserSerializer(serializers.ModelSerializer):last\u active=serializers.DateTimeField(source='user\u active.last\u active',read\u only=True)class Meta:model=user fields=['id','username','email','first\u name','is\u staff','last\u active']`@techbuildie啊,我的错了,我没有注意到。我会编辑响应