显示空数据的嵌套序列化程序
from rest_framework import serializers
from .models import PlayerTable, ChildTable
class ChildTableSerializer(serializers.ModelSerializer):
# x= ChildTable.objects.all().values
class Meta:
model = ChildTable
fields = ('season','goals','fk')
# fields =('fk',)
class PlayerTableSerializer(serializers.ModelSerializer):
player_details = ChildTableSerializer(many=True, read_only=True)
class Meta:
model = PlayerTable
fields = ('player_details',)
请帮助序列化程序获取的数据为空
什么是领域'player-details'
?它不是您PlayerTable
模型上的字段。您需要使用相关字段的名称。在你的情况下,因为你有ForeignKey
关系ChildTable
-->
PlayerTable
并且你没有指定related_name
,它是childtable_set
. 因此,如果您这样做,它应该可以工作:
class PlayerTableSerializer(serializers.ModelSerializer):
childtable_set = ChildTableSerializer(many=True, read_only=True)
class Meta:
model = PlayerTable
fields = ('childtable_set',)
或者,更改您的模型命名以更符合 Django 约定:
class PlayerDetail(models.Model):
player = models.ForeignKey(Player, db_column="fk", related_name="player_details", null=True, blank=True, on_delete=models.CASCADE)
...
class Meta:
managed = False
db_table = "child_table"
class Player(models.Model):
name = models.CharField(db_column="player_name", ...)
class Meta:
db_table = "player_table"
那么你的序列化器会起作用,因为关系是player_details
. 这也有一个好处,当你details.player
得到播放器对象时(现在,你必须这样做,details.fk
但实际上不返回外键值,它返回Player
对象)。此外,您的模型有更多的 Python 名称(Player
不是PlayerTable
)。您的代码将更具可读性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句