【发布时间】:2018-10-09 06:39:00
【问题描述】:
我有一个用于足球比赛的简单 API。我正在使用 Django 2.0 和 Django REST 框架。我有Team 和Player 的这两个模型
class Team(models.Model):
name = models.CharField(max_length=60)
budget = models.FloatField(default=100.0) # Millions? 114.53 M
user = models.OneToOneField(User, unique=True, on_delete=models.CASCADE)
competitions = models.ManyToManyField(Season)
def __str__(self):
return self.name
class Player(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField(null=True)
inMarket = models.BooleanField(default=False)
lastInMarket = models.DateTimeField(null=True)
team = models.ForeignKey(Team, null=True, on_delete=models.DO_NOTHING, related_name='team')
据我所知,这是定义 OneToMany 关系的正确方法,即 Team 有许多 Players。现在,另一方面,我想为具体球队显示APIView,以显示球队的所有信息,包括球员的信息。我有这两个Serializers:
class PlayersSerializer(serializers.ModelSerializer):
team = serializers.RelatedField(read_only=True)
class Meta:
model = Player
fields = ('id', 'name', 'age', 'position', 'team')
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
class TeamSerializer(serializers.ModelSerializer):
players = serializers.RelatedField(read_only=True, many=True)
class Meta:
model = Team
fields = ('name', 'user', 'competitions')
def create(self, validated_data):
return Team.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.players = validated_data
return instance
这是迄今为止我发现的最好的检索球队球员的方法。但是,我不确定这是否是正确的方法。无论如何,我无法将players 添加到fields,因为Team 模型没有玩家属性(引发异常)。我怎么能以某种方式解决这个问题?我有点迷路了
【问题讨论】:
标签: django django-rest-framework foreign-keys serialization