Skip to main content
 首页 » 编程设计

python之Django Rest Framework 外键嵌套

2024年10月01日22小虾米

我试图将我的用户表嵌套在我的关系表中。所以不是这个:

[ 
    { 
        "user": 1, 
        "related_user": 2, 
        "relationship": "followed_by" 
    } 
] 

我想得到这个:

[ 
    { 
        "user": { 
            "username": "user1", 
            "name": "User 1", 
            "email": "bla", 
            "phone": "bla", 
            "date_joined": "2017-11-01T21:34:13.101256Z" 
         }, 
        "related_user": { 
            "username": "user2", 
            "name": "User 2", 
            "email": "bla", 
            "phone": "bla", 
            "date_joined": "2017-11-01T21:34:13.101256Z" 
         }, 
        "relationship": "followed_by" 
    } 
] 

我查阅了教程并尝试添加 serializers.RelatedField 、 UserSerializer(many=true, read-only=true) 等,但没有任何效果

模型.py

class User(models.Model): 
    username = models.CharField(max_length=255) 
    name = models.CharField(max_length=255) 
    email = models.CharField(max_length=255) 
    phone = models.CharField(max_length=255) 
    date_joined = models.DateTimeField(auto_now_add=True, blank=True) 
 
    def __str__(self): 
        return str(self.pk) + ", " + self.username 
 
 
RELATIONSHIP_CHOICE = [ 
    ("follows", "follows"), 
    ("followed_by", "followed_by"), 
    ("none", "none"), 
] 
 
class Relationship(models.Model): 
    user = models.ForeignKey(User, related_name="primary_user", null=True) 
    related_user = models.ForeignKey(User, related_name="related_user", null=True) 
    relationship = models.CharField(max_length=40, choices=RELATIONSHIP_CHOICE, default=RELATIONSHIP_CHOICE[0]) 

序列化器.py

from rest_framework import serializers 
from . import models 
 
class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
        model = models.User 
        fields = ( 
            'username', 
            'name', 
            'email', 
            'phone', 
            'date_joined', 
        ) 
 
 
class RelationshipSerializer(serializers.ModelSerializer): 
    related_user = UserSerializer(many=True) 
 
    class Meta: 
        model = models.Relationship 
        fields = ( 
            'user', 
            'related_user', 
            'relationship', 
            'related_user' 
        ) 

我尝试将相关用户添加到我的序列化程序,但没有成功。我收到一个错误:“用户”对象不可迭代

感谢任何帮助。

请您参考如下方法:

class RelationshipSerializer(serializers.ModelSerializer): 
    user = UserSerializer(read_only=True) 
    related_user = UserSerializer(read_only=True) 
 
    class Meta: 
        model = models.Relationship 
        fields = ( 
            'user', 
            'related_user', 
            'relationship' 
        ) 

user = UserSerializer(read_only=True, many=True) 用于 manytomany 字段,user = UserSerializer(read_only=True) 用于 ForeignKey 字段。