我希望返回MultipleObjects,但我不确定如何继续收到此错误:
MultipleObjectsReturned at /clubs/
get() returned more than one Player -- it returned 2!
我希望它返回属于俱乐部的所有玩家的列表,但它只返回一个(如果我从我的数据库中删除所有其他玩家,但是当我添加团队的其余部分时,它会抛出此错误)I& #39;我不知道如何让get返回多个对象。
models.py
class Club(models.Model):
name = models.CharField(max_length=4096)
abbreviation = models.CharField(max_length=4096)
def __str__(self):
if self.player:
return self.player.name
return self.name
class Player(models.Model):
name = models.CharField(max_length=4096)
age = models.IntegerField()
goals = models.IntegerField()
club = models.OneToOneField(Club, null=True, related_name='player')
def __str__(self):
return self.name
views.py
class ClubViewSet(viewsets.ModelViewSet):
queryset = Club.objects.order_by('name')
serializer_class = ClubSerializer
class PlayerViewSet(viewsets.ModelViewSet):
queryset = Player.objects.order_by('name')
serializer_class = PlayerSerializer
serializer.py
class ClubSerializer(serializers.HyperlinkedModelSerializer):
player = serializers.HyperlinkedRelatedField(
many=False,
read_only=True,
view_name='player-detail'
)
class Meta:
model = Club
fields = ('url','name', 'abbreviation','player')
class PlayerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Player
fields = ('url', 'name', 'age', 'goals')
答案 0 :(得分:3)
你有一个从一个球员到另一个球场的场地。
class Player(models.Model):
club = models.OneToOneField(Club, null=True, related_name='player')
您还需要更改俱乐部的__str__
方法,因为它目前使用self.player
。我建议你使用俱乐部的名字,而不是包括所有的球员'名。
class Club(models.Model):
...
def __str__(self):
returns self.name
这意味着每个球员属于一个俱乐部,每个俱乐部属于一个球员。
使用外键更有意义。这意味着每个球员属于一个俱乐部,但许多球员可以属于同一个俱乐部。
class Player(models.Model):
club = models.ForeignKey(Club, null=True, related_name='players')
您必须创建迁移并在进行此更改后运行它。
然后更新序列化程序以支持多个播放器。
class ClubSerializer(serializers.HyperlinkedModelSerializer):
player = serializers.HyperlinkedRelatedField(
many=True,
read_only=True,
view_name='player-detail'
)
...