【发布时间】:2020-04-03 00:08:49
【问题描述】:
我正在为一个项目使用 Django Rest Framework,但遇到了问题。当前端创建一个团队时,他们希望使用一个 ID 引用所有关系,但是在获取团队时,他们想要来自关系的数据。我怎样才能做到这一点?
型号:
class Team(models.Model):
class Meta:
db_table = "team"
team_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
class Organization(models.Model):
class Meta:
db_table = "organization"
organization_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
class Position(models.Model):
class Meta:
db_table = "position"
position_id = models.AutoField(primary_key=True)
team = models.ForeignKey(Team, on_delete=models.CASCADE, related_name="positions")
class Player(model.Model):
class Meta:
db_table = "player"
player_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100)
positions = models.ManyToManyField(Position, related_name="players")
序列化器:
class TeamSerializer(serializers.ModelSerializer):
class Meta:
model = Team
fields = ["team_id", "name", "organization", "positions"]
positions = PositionSerializer(many=True) # This is merely for output. There is no need to create a position when a team is created.
organization = OrganizationSerializer() # Since an organization already exists I'd like to just give an organization_id when creating/editing a team.
# I don't think the other serializers matter here but can add them on request.
所以在团队中执行 POST 或 PATCH 时,我希望前端能够传递此有效负载
{
"name": "My Team",
"organization": 1
}
但在团队中执行 GET 时,我希望前端能够收到此响应。
{
"team_id": 1,
"name": "My Team",
"organization": {
"organization_id": 1,
"name": "My Organization"
},
"positions": [{
"position_id": 1,
"players": [{
"player_id": 1,
"name": "Member 1"
}
]
}
有没有办法做到这一点?
【问题讨论】:
标签: django rest django-rest-framework serialization